Tengo un mapa
public class MyMap implements Map<String,String>
Se hace algunas cosas en el PP y se debe hacer una de las siguientes destruir métodos:
- Si recolector de basura destruido sin myMap
close()
de lo que debería ejecutarclear()
el método - Si el objeto destruye después
close()
, todos los datos que guarda en el PP
Se debe trabajar como FileWriter. Si cierra la corriente - de datos ahorra, si no lo hace - se pierde :(
¿Qué debo usar? finalize()
, Sólo tiene que poner en práctica Closeable
o AutoCloseable
o algo diferente?
finalize()
está en desuso desde Java 9 . No se puede llamar si el VM sale: si se llama a Runtime.runFinalizersOnExit(true)
que se ejecutará (pero hay otros problemas con esto).
En su lugar debe aplicar AutoClosable
.
Esto permite cerrar automáticamente el Map
con una try-with-resources
.
También puede close()
el FileWriter
en su close()
método como FileWriter
implementos Closeable
(incluso AutoCloseable
) también.
Si desea, puede anular el finalize()
método como una copia de seguridad en caso de que el cierre no funcionaba correctamente, pero cuidar de los problemas de rendimiento y los siguientes como mis estados de origen:
- Siempre llame
super.finalize()
en sufinalize()
método.- No ponga la lógica de aplicaciones críticas en el tiempo
finalize()
, ya que es impredecible.- No utilice
Runtime.runFinalizersOnExit(true);
, ya que puede poner en peligro su sistema.
- Captura y registro de excepciones por sí mismo como el sistema de las ignorarán.