关注
我们知道,目前主流的虚拟机实现都采用了分代收集的思想,把整个堆区划分为新生代和老年代;新生代又被划分成 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 评论
相关推荐
牛客热帖
更多
正在热议
更多
# 在大厂上班是一种什么样的体验 #
12401次浏览 166人参与
# 你的mentor是什么样的人? #
51155次浏览 721人参与
# 程序员找工作至少要刷多少题? #
21264次浏览 272人参与
# 我和mentor的爱恨情仇 #
106284次浏览 948人参与
# 论秋招对个人心气的改变 #
13491次浏览 188人参与
# 机械人避雷的岗位/公司 #
44164次浏览 309人参与
# 为了减少AI幻觉,你注入过哪些设定? #
6068次浏览 182人参与
# 秋招落幕,你是He or Be #
54241次浏览 618人参与
# 校招第一份工作你干了多久? #
136663次浏览 597人参与
# 高薪高压 vs 低薪wlb,你怎么选? #
47411次浏览 290人参与
# 设计人如何选offer #
189721次浏览 868人参与
# 考公VS就业,你怎么选? #
91992次浏览 507人参与
# 职场上哪些行为很加分? #
322578次浏览 3601人参与
# 你的秋招进行到哪一步了 #
2530960次浏览 23253人参与
# 牛客AI体验站 #
7773次浏览 210人参与
# 机械人还在等华为开奖吗? #
312132次浏览 1582人参与
# 秋招投递记录 #
380932次浏览 3204人参与
# 12306一秒售罄,你抢到回家的票了吗? #
2321次浏览 52人参与
# 我现在比当时_,你想录用我吗 #
9459次浏览 129人参与
# 重来一次,我还会选择这个专业吗 #
411291次浏览 3898人参与
