El Recolector de Basura (o Garbage Collector) es uno de los componentes más importantes de la Máquina Virtual de Java (JVM). Es el mecanismo encargado de la gestión automática de la memoria.
Aquí tienes los detalles clave sobre su funcionamiento:
1. Gestión Automática de Memoria
A diferencia de otros lenguajes donde el programador debe reservar y liberar la memoria manualmente (usando comandos como malloc o free), en Java el programador solo se preocupa de crear objetos con new. El Recolector de Basura se encarga de identificar qué objetos ya no son necesarios y liberar el espacio que ocupan.
2. ¿Cómo identifica la «basura»?
El recolector actúa sobre los objetos que quedan sin referencias.
- Un objeto se marca para eliminar cuando ya no hay ninguna variable en el programa que apunte a él.
- En el caso de los Threads (hilos), cuando un hilo se detiene con
stop()y se desasignan las variables que lo usan, el objeto queda marcado para que el Garbage Collector libere su memoria.
3. Características principales
- Ejecución en segundo plano: Funciona de manera asíncrona, normalmente cuando el sistema detecta que la memoria disponible es baja o en momentos de inactividad.
- No es inmediato: Que un objeto se quede sin referencias no significa que se borre al instante; el recolector pasará «en algún momento» posterior.
- Evita errores comunes: Gracias a este sistema, se eliminan problemas clásicos de la programación como los memory leaks (objetos que se quedan olvidados en memoria) y los punteros erróneos a zonas de memoria ya liberadas.
4. El método finalize()
Las clases en Java pueden heredar de Object un método llamado finalize(). Este método es el que el Recolector de Basura intenta ejecutar justo antes de destruir el objeto, permitiendo realizar alguna tarea de limpieza final (aunque su uso no es muy recomendado en versiones modernas de Java).
