Sobes.tech
Middle

¿Existen enlaces que muestren cómo funciona el recolector de basura?

sobes.tech AI

Respuesta de la IA

Sí, se pueden crear ejemplos que demuestren la influencia del recolector de basura.

// Ejemplo 1: Creación de una gran cantidad de objetos

public class GarbageCollectionDemo1 {

    public static void main(String[] args) {
        List<DummyObject> objects = new ArrayList<>();
        for (int i = 0; i < 1000000; i++) {
            objects.add(new DummyObject(i)); // Crear muchos objetos
        }
        // En este momento, el recolector de basura puede ser llamado para liberar memoria
        // si los objetos de la lista ya no se usan en ninguna otra parte.
        // Incluso si no se llama explícitamente, se activará cuando sea necesario.

        // Limpiar la lista puede potencialmente liberar memoria
        objects.clear(); 

        System.gc(); // Solicitud explícita de recolección de basura (no garantiza su ejecución)
    }

    static class DummyObject {
        private int id;

        public DummyObject(int id) {
            this.id = id;
        }

        @Override
        protected void finalize() throws Throwable {
            // El método finalize se llama antes de la recolección de basura (no garantizado y no recomendado)
            // System.out.println("Objeto con id: " + id + " está siendo recolectado.");
        }
    }
}
// Ejemplo 2: Asignación de null a las referencias

public class GarbageCollectionDemo2 {

    public static void main(String[] args) {
        Object obj = new Object(); // Crear un objeto
        System.out.println("Objeto creado."); 

        obj = null; // Eliminar la referencia al objeto. Ahora es elegible para recolección de basura.
        System.out.println("Referencia al objeto establecida en null.");

        System.gc(); // Solicitud explícita de recolección de basura
    }
}

Estos ejemplos muestran cómo la creación de muchos objetos o la eliminación de referencias hace que los objetos sean elegibles para la recolección de basura. Es importante entender que llamar explícitamente a System.gc() no garantiza que el recolector de basura se ejecute inmediatamente; la JVM decide cuándo hacerlo, basándose en sus algoritmos internos.