Interviewfrage für Java-Entwickler

Wie wählst du einen Garbage Collector aus, und was weißt du über ZGC?

Worauf der Interviewer abzielt, wie du deine Antwort aufbaust und ein gesprochenes Beispiel zum Anpassen.

Kurzantwort

G1 ist der Default und passt für die meisten Services: regionenbasiert, generational, mit einem konfigurierbaren Pausenziel im Bereich von zehner Millisekunden. ZGC ist die Wahl, wenn die Pausenzeit dominiert, denn er erledigt fast alles nebenläufig und hält Pausen selbst bei sehr großen Heaps unter einer Millisekunde; seit Java 23 ist er standardmäßig generational. Parallel GC gewinnt beim reinen Durchsatz immer noch für Batch-Jobs, bei denen Pausen egal sind.

Warum Interviewer das fragen

Der Interviewer will wissen, ob du über einen Tradeoff zwischen Latenz und Durchsatz nachdenken kannst, statt Flags aus einem Blogpost zu kopieren. Die aktuellen Defaults zu nennen zeigt, dass dein Wissen frisch ist. Es öffnet außerdem die wichtigere Frage, ob du den Collector überhaupt tunen würdest, denn die meisten Garbage-Collection-Probleme sind in Wahrheit Probleme mit der Allokationsrate oder der Heap-Größe in der Anwendung.

So baust du deine Antwort auf

  • Rahme es als Tradeoff zwischen Latenz, Durchsatz und Footprint.
  • Nenn den Default und wann es völlig okay ist, ihn in Ruhe zu lassen.
  • Sag, wann ZGC seine Kosten verdient und worin diese Kosten bestehen.
  • Besteh darauf, zu messen, bevor irgendein Flag getunt wird.

Beispielantwort

Gesprochenes Beispiel, erste Person

Ich fange damit an, ihn in Ruhe zu lassen, denn G1 mit einer vernünftigen Heap-Größe schafft die meisten Services, und er balanciert Durchsatz schon gegen ein Pausenziel, das du setzen kannst. Bevor ich irgendetwas anfasse, schaue ich in die Garbage-Collection-Logs: Allokationsrate, Pausenverteilung, wie viel promoted wird und ob der Heap schlicht zu klein ist. Meistens ist das, was nach einem Collector-Problem aussieht, eine Anwendung, die viel zu viel alloziert, oder ein Heap, der so knapp dimensioniert ist, dass permanent gesammelt wird. Wenn Pausen wirklich meine Tail-Latenz treiben, etwa bei einem Trading- oder Bidding-Service mit großem Heap, gehe ich zu ZGC, der Marking und Relocation nebenläufig mit Load Barriers macht und Pausen deutlich unter einer Millisekunde hält. Seit Java 23 ist er generational, was den Durchsatzverlust behoben hat, wegen dem ihn viele gemieden haben. Der Tradeoff ist zusätzlicher CPU- und Speicher-Overhead für diese Barriers. Für einen nächtlichen Batch-Job gehe ich in die andere Richtung und nehme Parallel, denn eine Pause von zwei Sekunden ist irrelevant und ich will rohen Durchsatz.

Steht dieses Vorstellungsgespräch bald an? GhostPilot hört bei deinem Live-Call mit, erkennt die Frage in dem Moment, in dem sie gestellt wird, und bringt dir eine strukturierte Antwort in Echtzeit auf den Bildschirm. Probier es im nächsten Mock aus, oder hol dir einen $29 Session Pass, kein Abo, für den Ernstfall.

So funktioniert es

Nachfragen, mit denen du rechnen solltest

  • Worauf würdest du in einem Garbage-Collection-Log zuerst schauen?
  • Was ist eine Humongous Allocation in G1, und warum tut sie weh?
  • Wie wirkt sich die Heap-Größe auf Pausenzeiten und Sammelfrequenz aus?

Weitere Fragen für Java-Entwickler

Dein Interviewer stellt seine eigene Version davon. Kopier deine echte Stellenbeschreibung in den kostenlosen Question Predictor und bekomm die 20 Fragen, die diese Rolle am wahrscheinlichsten stellt, samt dem, worauf jede wirklich abzielt.

Meine Fragen vorhersagen

Üb die harten Fragen, bevor sie gestellt werden

Trainier mit einem Live-Copiloten und geh dann vorbereitet rein. Ein $29 Session Pass bringt dich durch das Vorstellungsgespräch, ohne Abo und ohne Bindung.

GhostPilot holen