Los objetos creados dinámicamente con un nuevo operador se desasignan automáticamente. La técnica que logra esto se llama garbage collection. Funciona así: cuando no existen referencias a un objeto, se supone que ese objeto ya no es necesario y que la memoria ocupada por el objeto se puede reclamar.

¿Cómo funciona un garbage collector automático?

Funciona observando la el heap de memoria, identificando a qué objetos se hace referencia y a cuáles no, y eliminando los objetos no utilizados. Esto es ampliamente conocido como el “algoritmo de marca y barrido”.

El proceso de desasignar la memoria es manejado automáticamente por el garbage collector en dos pasos:

Paso 1: Marcado

Este es el primer paso donde el recolector de basura identifica qué trozos de memoria están en uso y cuáles no, y marca aquellos objetos a los que ya no se hace referencia.

Paso 2: Borrado

En este paso, todos los objetos marcados, a los que ya no se hace referencia, en el Paso 1 se eliminan se reclama la memoria.

Esto se puede hacer en dos formas:
2a) Supresión normal

En esta eliminación, el asignador de memoria contiene referencias a bloques de espacio libre donde se puede asignar un nuevo objeto, como se muestra en la figura siguiente.

2b) Eliminación con compactación

En este proceso, en lugar de solo eliminar objetos de la memoria, los objetos restantes se compactarán para mejorar aún más el rendimiento, además de eliminar objetos no referenciados. Al mover el objeto referenciado, esto hace que la nueva asignación de memoria sea mucho más fácil y más rápida. Pero tiene un costo en operaciones para compactar la memoria

Y así es como funciona un garbage collector en conceptos básicos y fáciles de entender. Hoy en día java en sus versiones mas recientes, ofrece una amplia gama de tipos de garbage colletors con diferentes estrategias mejoradas. Los cuales vamos a ir viendo mas adelante, para que funcionan y como se configuran.

Categorized in:

Tagged in:

,