[讨论] 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——就跟你后面说的“好处”说的是同一件事。
|