Pregunta de entrevista para Desarrollador Java

¿Cómo eliges un recolector de basura, y qué sabes de ZGC?

Qué evalúa el entrevistador, cómo estructurar tu respuesta y un ejemplo hablado que puedes adaptar.

Respuesta rápida

G1 es el que viene por defecto y le sirve a la mayoría de servicios: basado en regiones, generacional y con un objetivo de pausa configurable en decenas de milisegundos. ZGC es la opción cuando manda el tiempo de pausa, porque hace casi todo el trabajo de forma concurrente y mantiene las pausas por debajo del milisegundo incluso con heaps enormes; es generacional por defecto desde Java 23. Parallel GC sigue ganando en rendimiento bruto para trabajos batch donde las pausas dan igual.

Por qué lo preguntan los entrevistadores

El entrevistador quiere saber si puedes razonar sobre un compromiso entre latencia y rendimiento, en vez de copiar flags de un blog. Nombrar los valores por defecto actuales demuestra que tu conocimiento está fresco. Además abre la pregunta más importante, que es si tocarías el recolector siquiera, ya que la mayoría de los problemas de recolección son en realidad problemas de tasa de asignación o de dimensionado del heap en la aplicación.

Cómo estructurar tu respuesta

  • Plantéalo como un compromiso entre latencia, rendimiento y huella de memoria.
  • Da el valor por defecto y cuándo está bien dejarlo en paz.
  • Di cuándo ZGC se gana su coste, y cuál es ese coste.
  • Insiste en medir antes de tocar ningún flag.

Ejemplo de respuesta

Ejemplo hablado, en primera persona

Empiezo por no tocarlo, porque G1 con un heap bien dimensionado le vale a la mayoría de servicios, y ya equilibra el rendimiento con un objetivo de pausa que puedes fijar. Miro los logs de recolección antes de tocar nada: tasa de asignación, distribución de pausas, cuánto se promociona y si el heap es simplemente demasiado pequeño. La mayoría de las veces lo que parece un problema del recolector es una aplicación que asigna muchísimo, o un heap tan ajustado que está recolectando sin parar. Si las pausas de verdad marcan mi latencia de cola, por ejemplo en un servicio de trading o de pujas con un heap grande, me paso a ZGC, que hace el marcado y la relocalización de forma concurrente con barreras de carga y mantiene las pausas muy por debajo del milisegundo. Es generacional desde Java 23, lo que corrigió la penalización de rendimiento que hacía que la gente lo evitara. El compromiso es CPU y memoria extra por esas barreras. Para un batch nocturno voy en la dirección contraria y uso Parallel, porque una pausa de dos segundos es irrelevante y lo que quiero es rendimiento bruto.

¿Tienes esta entrevista a la vuelta de la esquina? GhostPilot escucha tu llamada en vivo, detecta la pregunta en cuanto la hacen y pone una respuesta estructurada en tu pantalla en tiempo real. Pruébalo en tu próxima entrevista de práctica, o coge un Session Pass de $29, sin suscripción, para la de verdad.

Mira cómo funciona

Preguntas de seguimiento que puedes esperar

  • ¿Qué mirarías primero en un log de recolección de basura?
  • ¿Qué es una asignación humongous en G1, y por qué duele?
  • ¿Cómo afecta el tamaño del heap a los tiempos de pausa y a la frecuencia de recolección?

Más preguntas para Desarrollador Java

Tu entrevistador hará su propia versión de esta. Pega la descripción real del puesto en el Question Predictor gratuito y obtén las 20 preguntas que ese puesto tiene más probabilidades de hacerte, con lo que cada una busca en realidad.

Predecir mis preguntas

Ensaya las preguntas difíciles antes de que te las hagan

Practica con un copiloto en vivo y entra preparado. Un Session Pass de $29 te lleva a través de la entrevista sin suscripción y sin ataduras.

Consigue GhostPilot