Java no necesita que destruyas los objetos que has construido cuando dejas de utilizarlos (cuando son elegibles).
Java borra los objetos cuando determina que no se van autilizar más. Este proceso es conocido como recolección de basura.
La JVM de Java realiza las tareas de manejo de memoria por tí. Cuando un programa ha terminado de utilizar un objeto y ya NO hay más referencias a ese objeto, el objeto es finalizado y luego se recoge la basura.
Esto se hace periódicamente para liberar memoria ocupada por objetos que no se van a usar mas. Este escanea dinámicamente la memoria buscando objetos, marcando los que fueron referenciados y los que no. Después de investigar todos los posibles paths (rutas)de los objetos, los que no estan marcados (o sea, no estan referenciados) son reconocidos como basura y se borran.
Un objeto es elegible para la recolección de basura cuando no existen más referencias a ese objeto. Las referencias que se mantienen en una variable desaparecen de forma natural cuando la variable sale de su ámbito. O cuando se borra explícitamente un objeto referencia mediante la selección de un valor cuyo tipo de dato es una referencia a null.
El recolector de basura funciona en un thread (hilo) de baja prioridad y funciona tanto sincronía como asincrónicamente dependiendo de la situación y del sistema en el que se este ejecutando el entorno java.
Tambien, se le puede pedir al colector de basura que se ejecute en cualquier momento llamando al método gc() de la clase System (System.gc()), nos podria interesar ejecutar el recolector de basura para asegurarnos que lo hace en el mejor momento para el programa en lugar de hacerlo cuando le sea más conveniente al sistema de ejecución.
IMPORTANTE: Que se ejecute el colector no garantiza que los objetos sean recolectados.
Finalización
Antes de que un objeto sea recolectado, el recolector de basura le da una oportunidad para limpiarse él mismo mediante la llamada al método finalize() del propio objeto. Este proceso es conocido como finalización.
Se puede forzar que ocurra la finalización de un objeto llamando al método runFinalization() de la clase System.
