Jvm 新一代和老一代的比例是错误的?
当我使用jmap命令时,我发现年轻一代与老一代的比例不是默认的1:2。 为什么?Jvm 新一代和老一代的比例是错误的?,jvm,Jvm,当我使用jmap命令时,我发现年轻一代与老一代的比例不是默认的1:2。 为什么? JVM选项: -Xms2048m-Xmx2048m-XX:MaxPermSize=256m jmap-heap命令的结果: using parallel threads in the new generation. using thread-local object allocation. Concurrent Mark-Sweep GC Heap Configuration: MinHeapFreeRati
JVM选项:
-Xms2048m-Xmx2048m-XX:MaxPermSize=256m
jmap-heap命令的结果:
using parallel threads in the new generation.
using thread-local object allocation.
Concurrent Mark-Sweep GC
Heap Configuration:
MinHeapFreeRatio = 40
MaxHeapFreeRatio = 70
MaxHeapSize = 2147483648 (2048.0MB)
NewSize = 174456832 (166.375MB)
MaxNewSize = 174456832 (166.375MB)
OldSize = 1973026816 (1881.625MB)
NewRatio = 2
SurvivorRatio = 8
MetaspaceSize = 21807104 (20.796875MB)
CompressedClassSpaceSize = 1073741824 (1024.0MB)
MaxMetaspaceSize = 17592186044415 MB
G1HeapRegionSize = 0 (0.0MB)
Heap Usage:
New Generation (Eden + 1 Survivor Space):
capacity = 157024256 (149.75MB)
used = 127334032 (121.43519592285156MB)
free = 29690224 (28.314804077148438MB)
81.09195053278903% used
Eden Space:
capacity = 139591680 (133.125MB)
used = 122114984 (116.45792388916016MB)
free = 17476696 (16.667076110839844MB)
87.48013062096537% used
From Space:
capacity = 17432576 (16.625MB)
used = 5219048 (4.977272033691406MB)
free = 12213528 (11.647727966308594MB)
29.938478398143797% used
To Space:
capacity = 17432576 (16.625MB)
used = 0 (0.0MB)
free = 17432576 (16.625MB)
0.0% used
concurrent mark-sweep generation:
capacity = 1973026816 (1881.625MB)
used = 914168160 (871.8186950683594MB)
free = 1058858656 (1009.8063049316406MB)
46.33328612600063% used```
年轻一代与老一代的比例不是默认的1:2
没有这样的违约。默认设置是允许JVM以符合人体工程学的方式调整堆大小,除非某些参数被命令行选项覆盖
如果显式设置-XX:NewRatio=2
,则新一代的大小实际上是旧一代的1/2
旁注:
没有意义。自JDK 8以来没有PermGen-XX:MaxPermSize=256m
- 您没有提到
选项,但jmap输出表明已选择CMS GC-XX:+UseConMarkSweepGC
-XX:+UseConcMarkSweepGC
。您说过默认设置是允许JVM以符合人体工程学的方式调整堆大小。这与ConcMarkSweepGC有关吗?@learninJava GC算法的人体工程学不同。JVM版本之间也存在差异,包括次要更新。经验法则是——如果不显式地设置某个值,JVM将自行选择该值,而选择可能取决于许多不明显的因素。