[讨论] SurvivorRatio没用?

richard_2010 2013-01-11
SurvivorRatio采用的默认值,用jmap看到的配置如下:
Heap Configuration:
   MinHeapFreeRatio = 40
   MaxHeapFreeRatio = 70
   MaxHeapSize      = 4294967296 (4096.0MB)
   NewSize          = 1310720 (1.25MB)
   MaxNewSize       = 17592186044415 MB
   OldSize          = 5439488 (5.1875MB)
   NewRatio         = 2
   SurvivorRatio    = 8
   PermSize         = 21757952 (20.75MB)
   MaxPermSize      = 536870912 (512.0MB)

奇怪的是:
PS Young Generation
Eden Space:
   capacity = 1410859008 (1345.5MB)
   used     = 1102826664 (1051.7374649047852MB)
   free     = 308032344 (293.76253509521484MB)
   78.16703566739392% used
From Space:
   capacity = 10289152 (9.8125MB)
   used     = 8521896 (8.127113342285156MB)
   free     = 1767256 (1.6853866577148438MB)
   82.82408501691879% used
To Space:
   capacity = 10420224 (9.9375MB)
   used     = 0 (0.0MB)
   free     = 10420224 (9.9375MB)
   0.0% used

eden大小是1345m,但是from和to的大小都不到10m,如果按照SurvivorRatio=8的配置的话,from应该=1345/10才对吧,请问怎么回事?没有手动设置Xmn的大小,是jdk其他默认参数影响了么?
RednaxelaFX 2013-01-12
HotSpot VM里,ParallelScavenge系的GC(UseParallelGC / UseParallelOldGC)默认行为是SurvivorRatio如果不显式设置就没啥用。显式设置到跟默认值一样的值则会有效果
xiaoyu 2013-01-12
RednaxelaFX 写道
HotSpot VM里,ParallelScavenge系的GC(UseParallelGC / UseParallelOldGC)默认行为是SurvivorRatio如果不显式设置就没啥用。显式设置到跟默认值一样的值则会有效果


为什么这样设计?
RednaxelaFX 2013-01-12
xiaoyu 写道
为什么这样设计?

因为ParallelScavenge系的GC最初设计就是默认打开AdaptiveSizePolicy的,它会自动、自适应的调整各种参数
richard_2010 2013-01-13
那继续请教下,如果设置SurvivorRatio为8,我新生代总大小约有1365m,这样的话from和to space一共会占到260多m,会不会大了点?一直浪费130多m的空间
不过这样也有好处:不会导致新生代gc时to space空间不足直接晋升至旧生代去
RednaxelaFX 2013-01-13
还有TargetSurvivorRatio这个参数,默认是50,也就是默认目标是让survivor的其中一个space的使用率在50%上下浮动。如果担心浪费空间可以尝试把这个参数调高,但是那样的话就难以应付突然而来的burty allocation——就跟你后面说的“好处”说的是同一件事。
Global site tag (gtag.js) - Google Analytics