JVM tuning může dramaticky zlepšit výkon. Praktický cheat sheet.
Paměť¶
-Xms4g -Xmx4g -XX:MaxMetaspaceSize=512m
Garbage Collectory¶
-XX:+UseG1GC -XX:+UseZGC # Java 17+ -XX:+UseShenandoahGC
GC logging¶
-Xlog:gc*:file=gc.log:time,uptime
JFR¶
jcmd
Diagnostika¶
jstack
Kontejnery¶
-XX:MaxRAMPercentage=75.0
Pravidla¶
- Heap = 50-75% RAM
- Xms = Xmx
- G1GC pro většinu workloadů
- ZGC pro ultra-low latency
Volba garbage collectoru¶
G1GC je výchozí GC od Java 9 a dobrá volba pro většinu aplikací. Rozděluje heap na regiony a sbírá nejprve regiony s nejvíce garbage. ZGC (Java 17+) nabízí ultra-nízkou latenci s GC pauzami pod 1ms, ideální pro real-time systémy a mikroslužby citlivé na latenci. Shenandoah GC nabízí podobné vlastnosti jako ZGC a je dostupný v OpenJDK.
Java Flight Recorder (JFR) je produkční profiler s minimálním overheadem (typicky pod 1 %). Zaznamenává CPU vzorky, alokace, GC události, I/O a thread aktivitu. Kombinace JFR s JDK Mission Control poskytuje detailní analýzu výkonu bez nutnosti reprodukovat problém. Pro kontejnerové prostředí vždy nastavte -XX:MaxRAMPercentage místo fixních -Xmx hodnot, aby se JVM správně adaptoval na container memory limity.
Tip¶
Vždy měřte před a po změně. JFR je nejlepší nástroj pro Java performance analýzu.