[Q&A] -XX:NewSize=20m -XX:MaxNewSize=40m,-Xmn30m,-XX:NewRatio=5 啥作用
分配年轻代大小
[Q&A] 这3组参数都可以影响年轻代的大小,混合使用的情况下,优先级是什么?
高优先级:-XX:NewSize=20m -XX:MaxNewSize=40m
设置新生代初始值,最大值
中优先级:-Xmn30m
(默认等效-XX:NewSize=30m -XX:MaxNewSize=30m
) 设置新生代初始值
低优先级:-XX:NewRatio=5
设置老年代和新生代的比例。 如-XX:NewRatio=4
表示新生代:老年代 = 1:4,即新生代占1/5,老年代占4/5
推荐使用 -Xmn
参数,原因是这个参数相当于一次设定 NewSize
/MaxNewSIze
,而且两者相等,适用于生产环境;
-Xms -Xmx -Xmn 即可将堆内存布局完成
验证高优先级:
启动参数 |
---|
-Xms60m -Xmx80m -Xmn30m -XX:NewSize=20m -XX:MaxNewSize=40m -XX:NewRatio=5 -XX:+PrintCommandLineFlags -Xlog:gc* |
启动日志 |
-XX:ConcGCThreads=3 -XX:G1ConcRefinementThreads=13 -XX:GCDrainStackTargetSize=64 -XX:InitialHeapSize=62914560 -XX:MarkStackSize=4194304 -XX:MaxHeapSize=83886080 -XX:MaxNewSize=41943040 -XX:MinHeapSize=62914560 -XX:NewRatio=5 -XX:NewSize=20971520 -XX:+PrintCommandLineFlags -XX:ReservedCodeCacheSize=251658240 -XX:+SegmentedCodeCache -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseG1GC -XX:-UseLargePagesIndividualAllocation[0.012s][warning][gc,ergo] -XX:NewSize and -XX:MaxNewSize override -XX:NewRatio |
JPS+jhsdb jmap --heap --pid 进程ID |
Heap Configuration: MinHeapFreeRatio = 40 MaxHeapFreeRatio = 70 MaxHeapSize = 83886080 (80.0MB) NewSize = 20971520 (20.0MB) MaxNewSize = 41943040 (40.0MB) OldSize = 5452592 (5.1999969482421875MB) NewRatio = 5 SurvivorRatio = 8 MetaspaceSize = 22020096 (21.0MB) CompressedClassSpaceSize = 1073741824 (1024.0MB) MaxMetaspaceSize = 17592186044415 MB G1HeapRegionSize = 1048576 (1.0MB) |
中优先级验证:
启动参数 |
---|
-Xms60m -Xmx80m -Xmn30m -XX:NewRatio=5 -XX:+PrintCommandLineFlags -Xlog:gc* |
启动日志 |
-XX:ConcGCThreads=3 -XX:G1ConcRefinementThreads=13 -XX:GCDrainStackTargetSize=64 -XX:InitialHeapSize=62914560 -XX:MarkStackSize=4194304 -XX:MaxHeapSize=83886080 -XX:MaxNewSize=31457280 -XX:MinHeapSize=62914560 -XX:NewRatio=5 -XX:NewSize=31457280 -XX:+PrintCommandLineFlags -XX:ReservedCodeCacheSize=251658240 -XX:+SegmentedCodeCache -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseG1GC -XX:-UseLargePagesIndividualAllocation [0.015s][warning][gc,ergo] -XX:NewSize and -XX:MaxNewSize override -XX:NewRatio |
JPS + jhsdb jmap --heap --pid 进程ID |
Heap Configuration: MinHeapFreeRatio = 40 MaxHeapFreeRatio = 70 MaxHeapSize = 83886080 (80.0MB) NewSize = 31457280 (30.0MB) MaxNewSize = 31457280 (30.0MB) OldSize = 5452592 (5.1999969482421875MB) NewRatio = 5 SurvivorRatio = 8 MetaspaceSize = 22020096 (21.0MB) CompressedClassSpaceSize = 1073741824 (1024.0MB) MaxMetaspaceSize = 17592186044415 MB G1HeapRegionSize = 1048576 (1.0MB) |
低优先级验证:
启动参数 |
---|
-Xms60m -Xmx80m -XX:NewRatio=5 -XX:+PrintCommandLineFlags -Xlog:gc* |
启动日志 |
-XX:ConcGCThreads=3 -XX:G1ConcRefinementThreads=13 -XX:GCDrainStackTargetSize=64 -XX:InitialHeapSize=62914560 -XX:MarkStackSize=4194304 -XX:MaxHeapSize=83886080 -XX:MinHeapSize=62914560 -XX:NewRatio=5 -XX:+PrintCommandLineFlags -XX:ReservedCodeCacheSize=251658240 -XX:+SegmentedCodeCache -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseG1GC -XX:-UseLargePagesIndividualAllocation |
JPS + jhsdb jmap --heap --pid 进程ID |
Heap Configuration: MinHeapFreeRatio = 40 MaxHeapFreeRatio = 70 MaxHeapSize = 83886080 (80.0MB) NewSize = 1363144 (1.2999954223632812MB) MaxNewSize = 13631488 (13.0MB) 因新生代:老年代 = 1:5,且初始Heap Initial Capacity:60M,所以这里为10MOldSize = 5452592 (5.1999969482421875MB) NewRatio = 5 SurvivorRatio = 8 MetaspaceSize = 22020096 (21.0MB) CompressedClassSpaceSize = 1073741824 (1024.0MB) MaxMetaspaceSize = 17592186044415 MB G1HeapRegionSize = 1048576 (1.0MB) |