Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> Java

Entendiendo la recolección de basura en Java: Cómo funciona y por qué importa

¿Qué es la recolección de basura en Java?

El Recolector de Basura (GC) de Java gestiona la memoria automáticamente, liberando a los desarrolladores de la desasignación manual. Cuando un objeto no tiene referencias activas, el GC recupera su espacio en el heap, evitando fugas de memoria que podrían bloquear la aplicación.

En Java, los objetos se crean en el heap mediante el operador new. El runtime rastrea las referencias; cuando desaparece la última referencia, el objeto se vuelve elegible para recolección. El GC se ejecuta periódicamente en segundo plano, simplificando y haciendo más seguro tu código.

A diferencia de C, donde se requiere free(), Java elimina el riesgo de punteros colgantes y comportamiento indefinido, reforzando la fiabilidad y seguridad.

Todos los objetos en Java viven en la sección heap de memoria, el área que el GC escanea.

Ejemplo práctico: Observando el GC en acción

Paso 1 – Copia el código siguiente en un editor:

class Estudiante {
    int a;
    int b;
    public void setData(int c, int d) {
        a = c;
        b = d;
    }
    public void showData() {
        System.out.println("Valor de a = " + a);
        System.out.println("Valor de b = " + b);
    }
    public static void main(String[] args) {
        Estudiante s1 = new Estudiante();
        Estudiante s2 = new Estudiante();
        s1.setData(1, 2);
        s2.setData(3, 4);
        s1.showData();
        s2.showData();
        //Estudiante s3;
        //s3 = s2;
        //s3.showData();
        //s2 = null;
        //s3.showData();
        //s3 = null;
        //s3.showData();
    }
}

Paso 2 – Compila y ejecuta el programa. Inicialmente, se crean dos objetos Estudiante y dos variables de referencia. Consulta el diagrama a continuación.

Entendiendo la recolección de basura en Java: Cómo funciona y por qué importa

Paso 3 – Descomenta las líneas 20-22 y vuelve a ejecutar. Ahora s3 apunta al mismo objeto que s2. El diagrama muestra ambas referencias compartiendo un objeto.

Entendiendo la recolección de basura en Java: Cómo funciona y por qué importa

Paso 4 – Descomenta las líneas 23-24. Establecer s2 a null deja a s3 como única referencia, por lo que el objeto sigue vivo.

Entendiendo la recolección de basura en Java: Cómo funciona y por qué importa

Paso 5 – Descomenta las líneas 25-26. Con tanto s2 como s3 a null, el objeto se vuelve elegible para GC. El diagrama final ilustra este estado.

Entendiendo la recolección de basura en Java: Cómo funciona y por qué importa

Haciendo un objeto elegible para recolección

  1. Asigna su variable de referencia a null. El GC recuperará la memoria cuando se ejecute.
  2. Los tipos primitivos (int, double, etc.) no son objetos y no pueden ser null.

Entendiendo la recolección de basura en Java: Cómo funciona y por qué importa

Nota: Se desaconsejan los finalizadores explícitos; confía en el GC.

Java

  1. Dominar Operadores en Java: Tipos, Sintaxis y Ejemplos Prácticos
  2. Dominando interfaces en Java: Conceptos, implementación y mejores prácticas
  3. Dominando Try‑with‑Resources en Java: Gestión automática de recursos explicada
  4. Anotaciones en Java explicadas: Tipos, ubicación y ejemplos prácticos
  5. Java Static explicado: Variables, métodos y bloques – Ejemplos prácticos
  6. Interfaz vs Clase Abstracta en Java: Cómo elegir la abstracción correcta
  7. Sobrecarga de constructores en Java – Explicado con ejemplos de código prácticos
  8. Dominando Java Collections: Guía Completa de Estructuras de Datos Eficientes
  9. Java 10: Interfaz Recolector de Basura para Gestión de Memoria Flexible y Eficiente
  10. Mejoras en Java 10: Asignar Heap en NV-DIMM con -XX:AllocateHeapAt
  11. Java 9 Métodos de Fábrica de Colecciones: Simplificar Creación de List, Set y Map Inmutables