One of the first lessons of a good user experience is to not require the user to do more work than what is necessary.
This means that your idea to "notify the user so they can restart" is poor design and should be avoided.
Instead, evaluate your application and determine why it runs out of memory. Are there segments of data that can be dumped into a storage file while they're not used to free up memory? Is there some form of efficiency you could correct with better design patterns, data representation or algorithms?
Don't be reactive to the issue, be preventative. In the event that the OutOfMemoryError is unavoidable the application should have a way to save state before crashing.
Read some articles for further ideas: http://www.javaperformancetuning.com/news/qotm036.shtml