关注
我们知道,目前主流的虚拟机实现都采用了分代收集的思想,把整个堆区划分为新生代和老年代;新生代又被划分成 Eden 空间、 From Survivor 和 To Survivor 三块区域。
为什么非得是两个 Survivor 空间呢?要回答这个问题,其实等价于:为什么不是0个或1个 Survivor 空间?为什么2个 Survivor 空间可以达到要求?
一、为什么不是0个 Survivor 空间?
这个问题等价于:为什么需要 Survivor 空间。我们看看如果没有 Survivor 空间的话,垃圾收集将会怎样进行:一遍新生代 gc 过后,不管三七二十一,活着的对象全部进入老年代,即便它在接下来的几次 gc 过程中极有可能被回收掉。这样的话老年代很快被填满, Full GC 的频率大大增加。我们知道,老年代一般都会被规划成比新生代大很多,对它进行垃圾收***消耗比较长的时间;如果收集的频率又很快的话,那就更糟糕了。基于这种考虑,虚拟机引进了“幸存区”的概念:如果对象在某次新生代 gc 之后任然存活,让它暂时进入幸存区;以后每熬过一次 gc ,让对象的年龄+1,直到其年龄达到某个设定的值(比如15岁), JVM 认为它很有可能是个“老不死的”对象,再呆在幸存区没有必要(而且老是在两个幸存区之间反复地复制也需要消耗资源),才会把它转移到老年代。
总之,设置 Survivor 空间的目的是让那些中等寿命的对象尽量在 Minor GC 时***掉,最终在总体上减少虚拟机的垃圾收集过程对用户程序的影响。
查看原帖
3 评论
相关推荐
点赞 评论 收藏
分享

点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 笔试 #
2337017次浏览 27274人参与
# 谈薪时HR压价该怎么应对 #
187867次浏览 2993人参与
# 牛友故事会 #
495128次浏览 11445人参与
# 小米提前批笔试难吗 #
30413次浏览 335人参与
# 机械只有转码才有出路吗? #
122654次浏览 1584人参与
# 腾讯云智研发工作体验 #
17742次浏览 129人参与
# 高学历就一定能找到好工作吗? #
44008次浏览 568人参与
# 硬件打工人的必备素养 #
12983次浏览 80人参与
# 找工作有哪些冷知识 #
10430次浏览 145人参与
# 如果再来一次,你还会学硬件吗 #
117330次浏览 1383人参与
# 你觉得材料专业有必要实习嘛 #
10859次浏览 55人参与
# 机械人值得去的车企 #
13358次浏览 109人参与
# 通信/硬件公司求职体验 #
101278次浏览 793人参与
# 国企和大厂硬件兄弟怎么选? #
117198次浏览 1648人参与
# 实习期间如何提升留用概率? #
24741次浏览 342人参与
# 机械人,你最希望上岸的公司是? #
157963次浏览 1854人参与
# 非技术er求职现状 #
49938次浏览 364人参与
# 你的秋招第一面感觉怎么样 #
63759次浏览 528人参与
# 生物制药/化工校招攻略 #
38184次浏览 270人参与
# 通信/硬件求职避坑tips #
48470次浏览 479人参与