Java y fugas de memoria

Tengo una clase "Grafo" que contiene una un hashmap, un vector y un entero.
A su vez el vector es de una clase llamada "Vertice" que contiene dos enteros y otra clase propia llamada "AristasNodo".
La clase "AristasNodo" contiene a su vez una hashmap, un entero y un vector de otra clase propia llamada "Arista".
La clase "Aristas" son dos enteros.
Mi intención es vaciar o limpiar la clase Grafo, sin salir del entorno donde ha sido declarada la instancia de clase "Grafo".
Preguntas:
¿Si yo hago " g = null;" siendo "g"
la instancia de la classe grafo, el recolector de basura se encarga de borrar el resto de objetos que había relacionados con la instancia "g" o hay una fuga de memoria?
Si la respuesta es que existen fugas de memoria agradecería una forma rápida de vaciar el objeto sin salir del entorno donde ha sido declarada la instancia de la clase "Grafo".

2 respuestas

Respuesta
1
Sergio
Efectivamente, al realizar un g=null, el recolector borra todo. Con respecto a las fugas de memoria, me gustaría contestarte que no las hay, pero depende tanto de la máquina virtual (que a su vez depende del sistema operativo) que el afirmarlo categóricamente es imposible. Así, puede que el programa funcione finamente en Unix, pero se trague toda la memoria en Windows. O incluso, dependiendo de la JVM que tengas instalada en Windows, por ejemplo, gestione la memoria mejor o peor.
Creo que no deberías preocuparte por estos temas, ya que están fuera del alcance de nuestra mano, al no ser que crees tu propia JVM. Una vez que termines tu aplicación y te aburras, puedes empezar a probar diferentes máquinas virtuales para ver como mejora la gestión, pero por ahora, ya tienes bastante con lograr que una aplicación funcione correctamente.
Respuesta
1
Es correcto lo que dices, si haces g=null el recolector de basura de java se encarga de borrar todos los objetos que estén instanciados por g, y SOLO POR g. PERO debes de tener en cuenta que si algunos de los objectos que estuviesen instancidados por g, ademas están instanciados por otra variable, este no se borrar.
Por ejemplo g instancia a dos objectos, "x" e "y" y tenemos otra variable h que instancia solo a "x" si tu haces g=null solo se borrar el objeto "y", pero el objeto "x" no se borra porque sigue estando instanciado por otra variable (h).

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas