[讨论] hotspot之jvm里面的两个区survival 0、survival 1大小一定是相等的吗?

于冰-冷 2011-08-22
我能找到的资料貌似都是说survival 0 survival 1这两个区域是相等的,便于gc的时候相互复制,不过在实际工作的时候我碰到有一些linux服务器貌似不是这样显示的,比较困惑,有知道的同学请提点下:s0和s1是否的确有可能不一样大,有的话是什么情况需要这样调整,如何调整?谢谢。

这是我机器上的一些信息,s0显示比s1要大
jstat -gc 21932 2000
S0C    S1C    S0U    S1U      EC       EU        OC                                    
23104.0 14144.0  0.0   14127.0 52736.0  31803.0   174784.0               
23104.0 14144.0  0.0   14127.0 52736.0  31803.0   174784.0 
huxi 2011-08-26
研究了一下,没什么发现。
大小应该是相等的,也许不同的垃圾回收器导致大小不同的,不确定。不知道撒迦和ICY忙什么呢,希望有空出来指点一下。
wupuyuan 2011-08-31
我也不清楚,不过我觉得对于内存区里的两个新生代是不完全相等的。希望高手有空解释一下
于冰-冷 2011-08-31
大概有点头绪了,在系统使用Parallel Scavenge回收器的时候,如果不使用-XX:-UseAdaptiveSizePolicy选项,则eden和s0、s1的大小都是动态调整的。可见这里的描述 http://book.51cto.com/art/201011/235575.htm
wangdf_jee 2011-08-31
survival 0 survival 1空间是相等的。
SurvivorRatio设置Eden和Survivor容量比值。如果为8
在Eden和Survivor的大小是8:1的时候,每次回收都只有不多于10%的对象存活,当Survivor空间不够用时,需要依赖其他内存(这里指老年代)进行分配担保。
UseAdaptiveSizePolicy动态调整Java堆中各个区域的大小以及进入老年代的年龄。
wangdf_jee 2011-08-31
但事情都不是绝对的,JVM的版本太多
huxi 2011-09-01
wangdf_jee 写道
但事情都不是绝对的,JVM的版本太多

是的,没有特殊情况下,应该是指Oracle(SUN)JDK
Global site tag (gtag.js) - Google Analytics