Repaso
English
Java CoreAvanzadoJV-35

¿Qué significa una pausa "stop-the-world" en el garbage collection, y cómo la reducen los collectors modernos?

Opciones

  1. El programa se detiene para siempre y hay que reiniciarlo
  2. Todos los threads de la app se pausan durante el GC; G1 y ZGC la acortan (Opción correcta)
  3. El GC detiene el sistema operativo durante un momento
  4. Solo ocurre cuando se llama a System.gc() a mano

Respuesta

Todos los threads de la aplicación se pausan mientras trabaja el GC; collectors como G1 y ZGC hacen casi todo el trabajo de forma concurrente o en regiones pequeñas para acortar las pausas

Por qué

Para mover o liberar objetos de forma segura, el GC a veces necesita que todos los threads de la aplicación se pausen. Esa pausa se llama stop-the-world. Las pausas largas congelan un servicio (picos altos de latencia).

G1 (por defecto desde Java 9) divide el heap en regiones y recoge primero las que tienen más basura, buscando un tiempo de pausa objetivo.

ZGC y Shenandoah hacen casi todo el trabajo de forma concurrente, con pausas de cerca de un milisegundo, incluso con heaps muy grandes.

El ajuste empieza midiendo: logs del GC (-Xlog:gc), no adivinando flags.

Recuerda

Pausa = threads congelados por el GC. G1/ZGC buscan pausas cortas.

Términos clave

Practica esta pregunta en Repaso