Pergunta de entrevista para Desenvolvedor Java

Como você escolhe um garbage collector, e o que você sabe sobre o ZGC?

O que o entrevistador está avaliando, como estruturar sua resposta e um exemplo falado que você pode adaptar.

Resposta rápida

O G1 é o padrão e serve para a maioria dos serviços: baseado em regiões, geracional, com alvo de pausa configurável na casa das dezenas de milissegundos. O ZGC é a escolha quando o tempo de pausa domina, já que ele faz quase todo o trabalho de forma concorrente e mantém pausas abaixo de um milissegundo mesmo em heaps muito grandes; ele é geracional por padrão desde o Java 23. O Parallel GC ainda ganha em throughput bruto para jobs em lote onde pausas não importam.

Por que os entrevistadores perguntam isso

O entrevistador quer saber se você consegue raciocinar sobre um tradeoff de latência versus throughput em vez de copiar flags de um post de blog. Citar os padrões atuais mostra que seu conhecimento está fresco. Também abre a pergunta mais importante, que é se você tunaria o coletor, já que a maioria dos problemas de garbage collection são na verdade problemas de taxa de alocação ou de dimensionamento de heap na aplicação.

Como estruturar sua resposta

  • Enquadre como um tradeoff de latência versus throughput e footprint.
  • Dê o padrão e quando está tudo bem em deixar quieto.
  • Diga quando o ZGC compensa o custo, e qual é esse custo.
  • Insista em medir antes de tunar qualquer flag.

Exemplo de resposta

Exemplo falado, em primeira pessoa

Eu começo deixando quieto, porque o G1 com um heap de tamanho sensato aguenta a maioria dos serviços, e ele já equilibra throughput contra uma meta de pausa que você pode definir. Eu olho os logs de garbage collection antes de mexer em qualquer coisa: taxa de alocação, distribuição de pausas, quanto é promovido e se o heap simplesmente está pequeno demais. Na maior parte das vezes, o que parece problema de coletor é uma aplicação alocando demais, ou um heap tão apertado que ele fica coletando o tempo todo. Se as pausas realmente guiam minha latência de cauda, por exemplo num serviço de trading ou de bidding com heap grande, eu vou para o ZGC, que faz marcação e realocação de forma concorrente com load barriers e mantém pausas bem abaixo de um milissegundo. Ele é geracional desde o Java 23, o que resolveu a penalidade de throughput que fazia as pessoas evitarem ele. O tradeoff é CPU e memória extras para essas barriers. Para um job em lote noturno eu vou para o outro lado e uso o Parallel, já que uma pausa de dois segundos é irrelevante e throughput bruto é o que eu quero.

Vai encarar essa entrevista em breve? O GhostPilot escuta a sua chamada ao vivo, identifica a pergunta no instante em que ela é feita e coloca uma resposta estruturada na sua tela em tempo real. Teste na sua próxima entrevista simulada ou pegue um Session Pass de $29, sem assinatura, para a hora da verdade.

Veja como funciona

Perguntas de acompanhamento que você pode esperar

  • O que você olharia primeiro num log de garbage collection?
  • O que é uma alocação humongous no G1, e por que ela dói?
  • Como o tamanho do heap afeta tempos de pausa e frequência de coleta?

Mais perguntas para Desenvolvedor Java

Seu entrevistador vai fazer a própria versão desta. Cole a descrição real da vaga no Question Predictor gratuito e receba as 20 perguntas que essa vaga tem mais chance de fazer, com o que cada uma está de fato sondando.

Prever minhas perguntas

Ensaie as perguntas difíceis antes que elas apareçam

Pratique com um copiloto ao vivo e depois entre pronto. Um Session Pass de $29 te leva até o fim da entrevista, sem assinatura e sem amarras.

Instalar o GhostPilot