关注
我们知道,目前主流的虚拟机实现都采用了分代收集的思想,把整个堆区划分为新生代和老年代;新生代又被划分成 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 评论
相关推荐
牛客热帖
更多
正在热议
更多
# 我的实习收获 #
30912次浏览 502人参与
# 如果有时光机,你最想去到哪个年纪? #
47174次浏览 800人参与
# 实习吐槽大会 #
32807次浏览 160人参与
# 非技术岗简历怎么写 #
209824次浏览 2861人参与
# 晒一晒你的工位 #
85898次浏览 304人参与
# 26届秋招投递记录 #
3935次浏览 107人参与
# 2025牛客秋招季 #
4411次浏览 134人参与
# 双非能在秋招上岸吗? #
215235次浏览 1143人参与
# 被AI治愈的瞬间 #
52347次浏览 597人参与
# 怎么防止在试用期被辞退 #
122348次浏览 911人参与
# 我的租房踩坑经历 #
28420次浏览 287人参与
# 穿越回高考你还会选现在的专业吗 #
22023次浏览 267人参与
# 我和mentor的爱恨情仇 #
43751次浏览 278人参与
# 打工人的工作餐日常 #
40473次浏览 343人参与
# 软开人,说说你的烦心事 #
48118次浏览 359人参与
# 毕业旅行去哪玩儿 #
1266次浏览 33人参与
# 硬件/芯片公司工作体验 #
75276次浏览 664人参与
# 商战,最累的是我们 #
13083次浏览 52人参与
# 打工人锐评公司红黑榜 #
146051次浏览 920人参与
# 25届秋招公司红黑榜 #
262180次浏览 1094人参与