0Pricing
Java Academy · Lección

Regiones del heap de la JVM y ciclo de vida de los objetos

Explore la generación joven (Eden, Survivor), la generación antigua y Metaspace, y cómo se mueven los objetos entre ellas.

Regiones del heap de la JVM y ciclo de vida de los objetos es una lección gratuita de Java Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Java Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Java Academy incluye 4 lecciones en total.

El modelo de memoria de la JVM

La JVM divide la memoria en varias áreas. El heap contiene todas las instancias de clases y los arrays. Las áreas fuera del heap incluyen Metaspace (metadatos de clases), las pilas de ejecución y la memoria nativa.

Generación joven: espacio Eden

Los objetos recién asignados se colocan en Eden. Cuando Eden se llena, se ejecuta un Minor GC. Los objetos supervivientes se copian a un espacio Survivor.

// Object allocation starts in Eden:
String s = new String("hello");  // allocated in Eden
List<Integer> list = new ArrayList<>();  // also Eden

Espacios Survivor: S0 y S1

Los dos espacios Survivor (S0 y S1) contienen objetos que han sobrevivido al menos a un GC. Los objetos alternan entre S0 y S1 en cada Minor GC. Su contador de edad aumenta.

Umbral de permanencia

Cuando la edad de un objeto supera el umbral de permanencia (15 de forma predeterminada), se promociona a la generación antigua. Los objetos grandes pueden omitir la generación joven y pasar directamente a la generación antigua.

// JVM flags:
// -XX:MaxTenuringThreshold=15  (default)
// -XX:PretenureSizeThreshold=1m  (objects > 1MB go directly to Old Gen)

Generación antigua (espacio tenured)

Los objetos de larga duración residen en la generación antigua. Los Major GC (Full GC) recopilan la generación antigua y son más costosos. Reducir la cantidad de objetos de larga duración disminuye la frecuencia de los Full GC.

Metaspace (Java 8+)

Metaspace sustituyó a PermGen en Java 8. Contiene metadatos de clases, bytecode de métodos y cadenas internadas. Utiliza memoria nativa y crece dinámicamente (limitado por -XX:MaxMetaspaceSize).

// Flag examples:
// -XX:MetaspaceSize=64m        (initial Metaspace size)
// -XX:MaxMetaspaceSize=256m   (cap to avoid native OOM)

Vía rápida de asignación de objetos

La JVM utiliza Thread-Local Allocation Buffers (TLAB) para asignar memoria desde Eden sin sincronización. Cada subproceso tiene su propia porción pequeña de Eden.

Ciclo de vida de un objeto: alcanzabilidad

Un objeto está vivo si se puede alcanzar desde una raíz del GC (una variable de la pila, un campo estático o una referencia JNI). Los objetos inalcanzables pueden ser recopilados.

Object a = new Object(); // reachable via local variable
a = null;                 // now unreachable — eligible for GC

Referencias Soft, Weak y Phantom

SoftReference se libera antes de un OOM (se utiliza para cachés). WeakReference se libera en el siguiente GC. PhantomReference se utiliza para la limpieza posterior a la finalización.

Cache<String, Image> cache = new LinkedHashMap<>();
// Use SoftReference to let GC reclaim cache under memory pressure:
SoftReference<Image> ref = new SoftReference<>(loadHeavyImage());
Image img = ref.get(); // null if GC collected it

Finalización de objetos (evitarla)

finalize() está obsoleto y es impredecible: el GC lo llama antes de recopilar el objeto, pero no se garantiza cuándo ocurrirá. Utilice Cleaner (Java 9+) o try-with-resources en su lugar.

Opciones de configuración del heap

Controle el heap con -Xms (inicial) y -Xmx (máximo). Establézcalos con el mismo valor en producción para evitar pausas al cambiar el tamaño del heap.

// Recommended production flags:
// -Xms512m -Xmx512m   (fix heap to 512 MB)
// -XX:NewRatio=2       (Old:Young = 2:1)

Comprobación rápida

¿Dónde reside inicialmente un objeto recién asignado en el heap de la JVM?

Resumen

El heap de la JVM tiene una generación joven (Eden y Survivor) y una generación antigua. Los objetos envejecen durante los Minor GC y se promocionan. Metaspace contiene los metadatos de las clases. Controle estos espacios con -Xms/-Xmx y las opciones de ajuste.

Preguntas frecuentes

¿La lección «Regiones del heap de la JVM y ciclo de vida de los objetos» es gratis?

Sí — el texto completo de «Regiones del heap de la JVM y ciclo de vida de los objetos» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Java Academy, actualiza a CoddyKit PRO. El curso de Java Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Regiones del heap de la JVM y ciclo de vida de los objetos»?

Explore la generación joven (Eden, Survivor), la generación antigua y Metaspace, y cómo se mueven los objetos entre ellas. Practicas Java Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Java Academy?

No se requiere experiencia previa. Java Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.

¿Cuánto tiempo toma la lección «Regiones del heap de la JVM y ciclo de vida de los objetos»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Java Academy?

Sí. Cada lección de Java Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Regiones del heap de la JVM y ciclo de vida de los objetos
  2. Algoritmos de GC: Serial, G1, ZGC y Shenandoah
  3. Detección y corrección de fugas de memoria
  4. Indicadores de ajuste del GC y creación de perfiles con JVisualVM
← Volver a Java Academy