我的小鱼啊 2022-09-07 07:10 采纳率: 60%
浏览 16

关于GC中年轻代到老年代的问题

关于GC中年轻代到老年代的问题
网上的解释说是1+2+3+...+n的年龄到达survivor一半的时候,会将survivor中年龄>=n的存放到老年代的。这个我理解这个就是to区满了,因为to区就是survivor的一半,to区满了会将所有对象放进老年代中,这和前面说的根据年龄来判断有冲突。有没有能解释下这个一半的概念的
  • 写回答

1条回答 默认 最新

  • nssnail 2022-09-07 09:35
    关注

    你这种说法有误,survivor有一个from和to区,当Eden满了会yong gc到survior的from区,from区满了就会清理部分对象,把剩下的移动到to区,to满了又清理一次,剩下的又放回from区,这样来回8次,也就是移动16次(你说的年龄)或者满到清理不下之后,就才会被移动到old区。

    survivor是一种牺牲空间换时间的算法,因为清理完的空间是不连续的,比如form区的满了清理一次之后会有不连续的对象,然后他再把这些对象一个一个的移动到to区,那他就会很快把不连续的对象整理好,但是这种做法就是永远都有一半是空闲的空间

    评论

报告相同问题?

问题事件

  • 创建了问题 9月7日