Como notificar o usuário sobre um possível OutOfMemoryError

Ocorreu em minha aplicação o problema de OutOfMemoryError, causado por eu manter as dialog box sem chamar o dispose().
Mas, a preocupação que ficou é que, caso ocorra novamente (seja lá por qual motivo) um OutOfMemoryError, não existiria uma maneira de notificar o usuário para salvar seu trabalho antes que a memória estoure?
Em outras palavras, eu consigo, por exemplo, registrar um listener que me notifique que a memória está beirando a morte?

http://www.cs.uwm.edu/~boyland/papers/memory-error-talk.pdf

Obrigado pelo arquivo.
É uma solução possível, mas confesso que não me alegrou muito. Imagina ter que fazer o try{}finally{} em todo evento, me parece uma arquitetura demasiada focada em OutOfMemoryError.
Estou procurando ainda, mas será que não há um modo de ser notificado quando a memória estiver baixa? Um LowMemoryWarning é o que eu queria.

Uma ideia tambem é fazer como o word, ir salvando em um arquivo temporario as mudancas do usuario.

Quando ele salva as alteracoes vc limpa o arquivo, e quando o programa fecha tambem.

Isso ajuda nao soh no outofmemory, mas ajuda tb quando alguem chuta o estabilizador!

Agora modelo com listener pronto nao acho que tenha no JSE, talvez algum framework para monitorar a applicacao, mas nada impede que vc escreva um thread que rode de tempo em tempo e veja isso.

Bom, melhor mesmo seria monitorar a aplicacao com algo tipo jconsole, entender o pq do erro, e nao deixar acontecer mais! :slight_smile:

Abraço,

A idéia de salvar a cada 5 min é boa.
Encontrei essas duas classes tb:
http://java.sun.com/j2se/1.5.0/docs/api/java/lang/management/MemoryPoolMXBean.html
http://archive.eclipse.org/tptp/4.2.0/javadoc/Tracing_and_Profiling_Tools/public/org/eclipse/equinox/memory/MemoryManager.html

Vou ler e testar…

É, existe sim um modo de ser notificado sobre memory leaks. A quem possa interessar:
http://www.javaspecialists.eu/archive/Issue092.html

Obrigado pelo apoio galera.

OutofMemoryError pode estar indicando que a sua aplicação tem problemas arquiteturais ou a sua configuração da JVM está incorreta. É sempre bom dar uma olhada em estados que não deveriam ser salvos na Heap. Talvez esses deveriam estar num cache distribuido da vida ou até mesmo no banco de dados, dependendo do caso.