2010-06-26 10 views
5

¿Hay alguna manera en Java de hacer algo justo antes de quedarse sin memoria? Por ejemplo, mantener una lista de estados de documentos previos (para deshacer) y solo eliminar estados muy antiguos cuando la memoria está a punto de agotarse.Haga algo justo antes de quedarse sin memoria

+0

posible duplicado de http://stackoverflow.com/questions/2679330/catching-java-lang-outofmemoryerror, http://stackoverflow.com/questions/1692230/is-it-possible-to-catch-out- of-memory-exception-in-java y http://stackoverflow.com/questions/3058198/can-the-jvm-recover-from-an-outofmemoryerror-without-a-restart – BalusC

+1

Se trata de atrapar a OOME, esto se trata de evitar que suceda. –

Respuesta

2

Por ejemplo, mantener una lista de estados anteriores del documento (para deshacer) y sólo la eliminación de estados muy antiguos cuando la memoria está a punto de agotarse?

Es posible que pueda hacer algo con SoftReference. Tenga en cuenta también la documentación general para el paquete java.lang.ref. Si solo se puede acceder a los objetos a través de SoftReference, se recolectarán los desechos antes de que ocurra un error de falta de memoria. Sin embargo, tenga en cuenta que las VM no están obligadas a mantener esas referencias antes de tal evento ni a garantizar el orden en el que podrían ser eliminadas. Puede que sea mejor combinarlas con alguna forma de persistencia.

1

Sí, ciertamente es posible.

Probablemente usaría una lista de SoftReference s para los estados del documento anterior. Se garantiza que se eliminarán antes de que ocurra una excepción de falta de memoria.

En algún intervalo periódico, puede limpiar las referencias nulas fuera de la lista.

También recomendaría mantener una referencia normal al estado más reciente por lo que siempre se puede garantizar al menos un deshacer :-)

Esto dependerá de la implementación JVM, pero si tienes suerte, la JVM mantenga los estados más recientes y elimine los más antiguos. Esto no es estrictamente requerido en la especificación de JVM, pero es el comportamiento recomendado.

Cuestiones relacionadas