Java Academy · Les

GC-algoritmen: Serial, G1, ZGC, Shenandoah

Vergelijk de kenmerken van GC-pauzes en de afwegingen rond doorvoer bij moderne JVM-collectors.

Les 2 van 413 stappen

GC-algoritmen: Serial, G1, ZGC, Shenandoah is een gratis Java Academy-les op CoddyKit. Dit is les 2 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Java Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Java Academy bevat in totaal 4 lessen.

Een GC-algoritme kiezen

De JVM wordt geleverd met meerdere GC-algoritmen, elk geoptimaliseerd voor verschillende werklasten. De juiste keuze hangt af van de heapgrootte, latentievereisten en doorvoerdoelen.

// Enable GC algorithms:
// -XX:+UseSerialGC
// -XX:+UseParallelGC
// -XX:+UseG1GC       (default since Java 9)
// -XX:+UseZGC        (Java 15+ production)
// -XX:+UseShenandoahGC (Red Hat / OpenJDK builds)

Seriële GC

Seriële GC gebruikt één thread voor het verzamelen. Alle threads van de toepassing worden tijdens GC gestopt, een stop-de-wereldpauze. Dit is alleen geschikt voor kleine heaps of omgevingen met één CPU, zoals ingebedde systemen.

// Use:
// java -XX:+UseSerialGC -Xmx256m MyApp
// Pauses: long (proportional to heap size)
// Throughput: low
// Best for: CLI tools, small heaps < 100 MB

Parallelle GC (doorvoercollector)

Parallelle GC gebruikt meerdere threads voor Minor GC en Major GC. Stop-de-wereldpauzes zijn korter dan bij seriële GC, maar nog steeds aanzienlijk. Dit is het meest geschikt voor batchverwerking waarbij doorvoer belangrijker is dan latentie.

// Use:
// java -XX:+UseParallelGC -XX:ParallelGCThreads=8 MyApp
// Pauses: moderate
// Throughput: high
// Best for: batch jobs, number crunching

G1-GC (Garbage-First)

G1 verdeelt de heap in regio's van gelijke grootte, ongeveer 2 KB tot 32 MB. Het verzamelt eerst de regio's met het meeste afval en voldoet daarbij aan een instelbare pauzedoelstelling. Standaard sinds Java 9.

// Use:
// java -XX:+UseG1GC -XX:MaxGCPauseMillis=200 MyApp
// Pauses: bounded by target (but not guaranteed)
// Throughput: good
// Best for: large heaps (4 GB+), mixed workloads

G1-regiotypen

G1-regio's worden dynamisch toegewezen als Eden, Survivor, Old of Humongous, voor grote objecten van meer dan 50% van de regiogrootte. Dankzij deze flexibiliteit is incrementele verzameling mogelijk.

ZGC (Z Garbage Collector)

ZGC voert het meeste werk gelijktijdig met de toepassing uit. Pauzeduren liggen doorgaans onder 1 ms, ongeacht de heapgrootte. Productiegeschikt sinds Java 15.

// Use:
// java -XX:+UseZGC -Xmx16g MyApp
// Pauses: < 1 ms (usually)
// Throughput: slightly lower than G1 (concurrent work has CPU cost)
// Best for: large heaps, low-latency services (APIs, trading)

Shenandoah GC

Shenandoah van Red Hat bereikt ook pauzes onder een milliseconde dankzij gelijktijdige compactie. Het is beschikbaar in OpenJDK-versies. De doelen lijken sterk op die van ZGC, maar er worden andere interne algoritmen gebruikt.

// Use:
// java -XX:+UseShenandoahGC MyApp
// Available in: Red Hat builds, some AdoptOpenJDK distributions
// Pauses: sub-millisecond
// Best for: latency-sensitive workloads

ZGC met generaties (Java 21+)

Java 21 introduceerde ZGC met generaties: de aanpak met korte pauzes van ZGC wordt gecombineerd met generatiegerichte verzameling. Daardoor neemt de CPU-overhead af terwijl de pauzes minimaal blijven.

// Enable in Java 21+:
// java -XX:+UseZGC -XX:+ZGenerational -Xmx8g MyApp

Afweging tussen GC-pauzeduur en doorvoer

Geen enkel GC-algoritme is overal het beste in. Parallelle GC maximaliseert de doorvoer. G1 brengt doorvoer en latentie in balans. ZGC en Shenandoah minimaliseren pauzes tegen geringe kosten voor de doorvoer.

GC-logboekregistratie inschakelen

Leg GC-gebeurtenissen vast met -Xlog:gc*:file=gc.log:time,uptime,level. Analyseer logboeken met hulpmiddelen zoals GCViewer of GCEasy om lange pauzes en pieken in geheugentoewijzingen te vinden.

// JVM flags:
// -Xlog:gc*:file=gc.log:time,uptime,level,tags
// Inspect logs:
// cat gc.log | grep "Pause"

GC bewaken met JVM-statistieken

Gebruik ManagementFactory.getGarbageCollectorMXBeans() om het aantal en de duur van GC's programmatisch uit te lezen, of exporteer deze via Micrometer in Spring Boot-toepassingen naar Prometheus.

ManagementFactory.getGarbageCollectorMXBeans().forEach(gc ->
    System.out.printf("%s: %d collections, %d ms%n",
        gc.getName(), gc.getCollectionCount(), gc.getCollectionTime()));

Korte controle

Welk GC-algoritme richt zich in productie op pauzeduren onder een milliseconde?

Samenvatting

Seriële GC voor zeer kleine heaps, parallelle GC voor batchdoorvoer, G1 voor uitgebalanceerde werklasten als standaard en ZGC of Shenandoah voor ultralage latentie. Schakel GC-logboekregistratie in productie in om problemen vroegtijdig te ontdekken.

Gratis beginnen

Leer Java met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
104
Lessen
374

Veelgestelde vragen

Is de les “GC-algoritmen: Serial, G1, ZGC, Shenandoah” gratis?

Ja — de volledige tekst van “GC-algoritmen: Serial, G1, ZGC, Shenandoah” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus Java Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Java Academy bevat in totaal 4 lessen.

Wat leer ik in “GC-algoritmen: Serial, G1, ZGC, Shenandoah”?

Vergelijk de kenmerken van GC-pauzes en de afwegingen rond doorvoer bij moderne JVM-collectors. Je oefent met Java Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met Java Academy te beginnen?

Ervaring vooraf is niet nodig. Java Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 2 van 4.

Hoe lang duurt de les “GC-algoritmen: Serial, G1, ZGC, Shenandoah”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over Java Academy?

Ja. Elke les over Java Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. JVM-heapregio's en de levenscyclus van objecten
  2. GC-algoritmen: Serial, G1, ZGC, Shenandoah
  3. Geheugenlekken detecteren en verhelpen
  4. GC-tuningflags en JVisualVM-profilering
← Terug naar Java Academy