Java Memory Management: Garbage Collection Tuning + Sizing Memory Generations
Java Memory Management: Garbage Collection Tuning + Sizing Memory Generations
OVERVIEW
JVM memory areas GC Tuning SAP standards HPJMeter JVMStat SAP Memory Analyser
JAVA VS C++
# include < string> int ma in ( int a rgc, cha r ** a rgv) { int i; string * va r; for (i = 0; i < 1000; i + + ) { va r = ne w string (me mory le a king or not); de le te (va r); } }
JAVA VS C++
import ja va .la ng.String; public sta tic void ma in ( String [] a rgume nts) { int i; String va r; for (i = 0; i < 1000; i + + ) { va r = ne w String (me mory ne ve r le a king); } }
HOTSPOT JVM
GC LOGGING
-verbose:gc
[GC 325407K->83000K(776768K), 0.2300771 secs]
-XX:+PrintGCDetails
[GC [DefNew: 64575K->959K(64576K), 0.0457646 secs] 196016K>133633K(261184K), 0.0459067 secs]]
-XX:+PrintGCTimeStamps 111.042: [GC 111.042: [DefNew: 8128K->8128K(8128K), 0.0000505 secs]111.042: [Tenured: 18154K->2311K(24576K), 0.1290354 secs] 26282K->2311K(32704K), 0.1293306 secs]
Logfile:
GC LOGGING
-XX:+PrintTenuringDistribution 1096.789: [GC 1096.789: [ParNew Desired survivor size 86232268 bytes, new threshold 6 (max 12) - age 1: 50754696 bytes, 50754696 total - age 2: 12147696 bytes, 62902392 total
PERFORMANCE CONCEPTS
TROUGHPUT: % of runtime in GC
PAUSE FOOTPRINT PROMPTNESS
GC DESIGN
SERIAL vs PARALLEL
CONCURRENT vs STOPTHEWORLD COMPACTING vs NONCOMPACTING vs COPYING
Default Collector
-XX:+UseParallelGC -XX:UseConcMarkSweepGC -Xincgc
DEFAULT GC
Single Thread
Stop the World
PARALLEL GC
CONCURRENT
Parallel Minor GC
Concurrent Full GC Fragmentation
TUNING GUIDELINES
Use tools to get an idea of the applications lifetime distribution ++ objects alive during GC = longer pauses Young Generation Guarantee ++ Eden space and Survivor spaces:
Fast collection because more dead object Less collections does not equal longer pauses Less copying Less often full collections + faster full collections
More processors = more memory needed (esp Eden) Set memory sizes optimal, test a GC, retune memory sizes
SAP SETTINGS
Sapnote 723909 -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:NewSize = -XX:MaxNewSize -XX:PermSize = -XX:MaxPermSize (256m 512m) -Xms = -Xmx = 2048 MB (170m Dispatcher + 50m per extra server) -XX:NewSize = 1/6 Xmx (1/3 Dispatcher) -Xss2m -XX:SurvivorRatio=2 -XX:TargetSurvivorRatio=90 -XX:+UseParNewGC -XX:+PrintTenuringDistribution -XX:MaxTenuringThreshold=31 -XX:+UseTLAB -XX:+UseConcMarkSweepGC -XX:DisableExplicitGC