Desarrollador Java: pregunta de entrevista

¿Cómo afecta el garbage collection de Java a una aplicación?

El GC de Java recupera objetos no alcanzables desde roots; tasa de asignación, heap, vida de objetos y collector afectan throughput y pausas, por lo que se ajusta usando logs y objetivos de latencia.

Respuesta directa

Qué debe cubrir una buena respuesta

Cómo funciona

El recolector libera memoria que ya no es alcanzable, y la aplicación paga en dos monedas: CPU dedicada a trazar y copiar objetos, y pausas cuando el recolector necesita detener la aplicación. Las recolecciones de la generación joven son frecuentes y cortas; las de la generación vieja o completas son más raras y largas. La tasa de asignación, la fracción de objetos que sobreviven y el tamaño del heap determinan ambas. G1 equilibra throughput y pausas; ZGC y Shenandoah mantienen pausas de milisegundos en heaps grandes a cambio de algo de throughput. Las decisiones salen de los logs de GC y los percentiles de latencia, no de flags heredados.

Ejemplo

Un servicio con picos de p99 de 200 ms cada pocos minutos mostraba en el log de GC recolecciones de la generación vieja causadas por una caché que promovía millones de entradas de vida corta; acotar la caché y reducir la asignación en la ruta caliente eliminó los picos sin cambiar de recolector ni de tamaño de heap. Cambiar a ZGC habría ocultado el síntoma mientras el problema de asignación seguía.

Errores frecuentes

  • Poner un heap enorme para reducir recolecciones y obtener pausas más largas cuando ocurren.
  • Llamar a System.gc() desde el código de la aplicación.
  • Ajustar flags copiados de un blog sin leer el log de GC de esta carga concreta.

Una estructura útil para responder

Responde desde tu propia experiencia.

No memorices un guion: usa solo ejemplos que puedas explicar con honestidad en preguntas posteriores.

Practica esta respuesta con MiraHint

Abre el espacio de trabajo de escritorio y ensaya una respuesta clara con tus propias palabras.

Descargar MiraHint
Preguntas de entrevista para Desarrollador Java