Logo Grupo Codesi

Colector de basura - Garbage Collector

Uso de Garbage Collector

garbage collector

El sistema de java se ocupa automáticamente de liberar la memoria de los objetos que ya han perdido la referencia, esto es, objetos que ya no tienen ningún nombre que permita acceder a ellos, por ejemplo por haber llegado al final del bloque en el que habían sido definidos, porque a la referencia se le ha asignado el valor null o porque a la referencia se le ha asignado la dirección de otro objeto. A esta característica de Java se le llama garbage collector collection (recogida de basura). En Java es normal que varias variables de tipo referencia apunten al mismo objeto. Java lleva internamente un contador de cuántas referencias hay sobre cada objeto. El objeto podrá ser borrado cuando el número de referencias sea cero. Como ya se ha dicho, una forma de hacer que un objeto quede sin referencia es cambiar ésta a null, haciendo por ejemplo:
ObjetoRef = null;

En Java no se sabe exactamente cuándo se va a activar el garbage collector. Si no falta memoria es posible que no se llegue a activar en ningún momento. No es pues conveniente confiar en él para la realización de otras tareas más críticas. Se puede llamar explícitamente al garbage collector con el método System.gc(), aunque esto es considerado por el sistema sólo como una sugerencia a la JVM; para conocer este funcionamiento practicamente dejamos este curso java con buenas opiniones y referencias.

finalizadores y colector de basura

Finalizadores

Los finalizadores son métodos que vienen a completar la labor del garbage collector. Un finalizador es un método que se llama automáticamente cuando se va a destruir un objeto (antes de que la memoria sea liberada de modo automático por el sistema). Se utilizan para ciertas operaciones de terminación distintas de liberar memoria (por ejemplo: cerrar ficheros, cerrar conexiones de red, liberar memoria reservada por funciones nativas, etc.).

Hay que tener en cuenta que el garbage collector sólo libera la memoria reservada con new. Si por ejemplo se ha reservado memoria con funciones nativas en C (por ejemplo, utilizando la función malloc()), esta memoria hay que liberarla explícitamente utilizando el método finalize().

Otra diferencia con los destructores, es que como ya hemos dicho, los destructores se cargan de forma automática por el sistema cuando es necesario liberar memoria, y los finalizadores igual, pero hay que definirlos en la clase. Para ello debemos saber que un finalizador es un método de objeto sin valor de retorno ni argumentos, y tiene un nombre establecido (finalize). Por lo que un finalizador sería: finalize()

Tampoco se puede saber el momento preciso en que los finalizadores van a ser llamados. En muchas ocasiones será conveniente que el programador realice esas operaciones de finalización de modo explícito mediante otros métodos que él mismo llame. El método System.runFinalization() sugiere a la JVM que ejecute los finalizadores de los objetos pendientes que han perdido la referencia; para conocer estos funcionamientos recomendamos este curso de java donde aprenderás de la mano de un experto.

Articulos Relacionados a la tecnología Java

Seguridad de Java Java para Android Applets Java Juegos en Java Web Services Java Servidor Java Java 8 Fundamentos de Java 8 Paquetes en Java
Diplomado Java Diplomado Javascript

Diseño de paginas Web Grupo Codesi