你真的了解JVM吗?
那么为什么要设置两个survivor呢?如果只有一个可以嘛?(化身为面试官了嗷) 答案肯定是不可以嘛。。结合复制算法的思想,我们可以想到一块survior区必然是要保持为空的,以便我们将存活的对象复制过去。假设只有一块空白surviorA,当eden区满了的时候,触发第一次minorGC,我们将eden区中存活到达一定时间的对象复制到surviorA中,很快第二次触发minorGC,eden区有部分对象要进入survivorA区中,而surviorA区本身也有一部分对象要被回收,此时就会在survior中产生 内存碎片 ,根据复制算法的思想,我们希望得到的是规整的内存空间;如果是两个survior区的话,此时就可以将eden区和存放有对象的surviorA区中存活的对象都复制到空白surviorB区中,然后清空前面提到的eden区和surviorA区,此时原先存放有对象的surviorA变成了空白survior区,等待下一次minorGC存放对象。 我们经常会听到MinorGC和FullGC或者说MajorGC这种说法,那么它们具体代表的含义你真的清楚嘛?
总结 以上内容梗概基本来源于《深入理解java虚拟机》这本书的前三章,也是笔者重点阅读的章节,属于比较基础和理论的部分,其中结合了笔者自身的理解和粗浅认识,如果有偏颇之处,望读者不吝指出。(太长的篇幅容易产生阅读抵触~ 哈哈哈)后面有机会的话,会填坑一下虚拟机的类加载机制和java内存模型和线程部分。 【编辑推荐】
点赞 0 (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |