Pregunta

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

¿Fue útil?

Solución

Por ejemplo, ¿mantener una lista de estados de documentos anteriores (para deshacer) y solo eliminar 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 java.lang.ref paquete. Si los objetos solo son accesibles a través de un SoftReference, se recolectarán basura antes de que ocurra un error de memoria. Sin embargo, tenga en cuenta que las máquinas virtuales no están obligadas a mantener esas referencias antes de tal evento o hacer garantías sobre en qué orden podrían estar despejados. Es posible que las combine mejor con alguna forma de persistencia.

Otros consejos

Sí, ciertamente es posible.

Probablemente usaría una lista de SoftreferenceS para sus estados de documento anteriores. Se garantiza que estos se eliminarán antes de que ocurra una excepción fuera de memoria.

En un 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 para que siempre pueda garantizar al menos una deshacer :-)

Dependerá de la implementación de JVM, pero si tiene suerte, el JVM mantendrá los estados más recientes y eliminará los más antiguos. Esto no se requiere estrictamente en la especificación JVM, pero es el comportamiento recomendado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top