0
回答
关于JVM的两个问题

问题1.

java堆内存的年轻代中,
情况: 如果发生Minor GC之后,To Survivor区的空间不足以容纳来自Eden和From Survivor的存活对象,
背景:而这个时候既没有年龄达到MaxTenuringThreshold的对象,也没有发生相同年龄对象的大小总和超过Survivor空间的一半的情况
问题:java虚拟机会怎么处理这种情况?按理说应该是将一部分对象移入年老代,那么问题是会移动多少对象进入年老代?

问题2. 

书中有说:java堆内存中,如果在Survivor空间中相同年龄所有对象大小的总和大于Survivor空间的一半,那么年龄大于或等于该年龄的对象就可以直接进入年老代,无须等到MaxTenuringThreshold中要求的年龄。
问题是:每次Minor GC,都会使Survivor中的对象的年龄加1,而来自Eden去的对象的年龄应该都是1,这样的话,从一个From Survivor区来的对象永远不会有相同年龄对象的大小总和大于Survivor空间的一半的情况发生,而能发生这种情况只能是来自于Eden的对象(它们的年龄为1)那么如果某次来自Eden区的所有对象之和大于Survivor空间的一半时,会导致来自Eden和From Survivor的对象都进入来年老代!!!感觉很不合理,所以我想知道我的理解哪里有问题?

<无标签>
举报
小强零号
发帖于3年前 0回/97阅
顶部