关注
我们知道,目前主流的虚拟机实现都采用了分代收集的思想,把整个堆区划分为新生代和老年代;新生代又被划分成 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 评论
相关推荐
10-18 13:02
西安理工大学 C++ 点赞 评论 收藏
分享
牛客热帖
正在热议
# 25届秋招总结 #
317254次浏览 2917人参与
# 上班苦还是上学苦呢? #
66772次浏览 553人参与
# 百度开奖 #
176746次浏览 1107人参与
# 地方国企笔面经互助 #
4263次浏览 12人参与
# 如果有时光机,你最想去到哪个年纪? #
19706次浏览 319人参与
# 选完offer后,你后悔学本专业吗 #
21118次浏览 151人参与
# 阿里云管培生offer #
35424次浏览 419人参与
# 如何一边实习一边秋招 #
994843次浏览 12652人参与
# 招聘要求与实际实习内容不符怎么办 #
10595次浏览 276人参与
# 学历or实习经历,哪个更重要 #
52906次浏览 414人参与
# 海康威视求职进展汇总 #
400019次浏览 3406人参与
# 正在实习的你,几点下班 #
52795次浏览 394人参与
# 国央企薪资爆料 #
10696次浏览 76人参与
# 租房前辈的忠告 #
109240次浏览 5232人参与
# 软开人,秋招你打算投哪些公司呢 #
43797次浏览 544人参与
# 得物求职进展汇总 #
67063次浏览 686人参与
# 软件开发薪资爆料 #
2184391次浏览 21809人参与
# 米哈游求职进展汇总 #
176692次浏览 1464人参与
# 美的求职进展汇总 #
206997次浏览 1619人参与
# 2023毕业生求职有问必答 #
120921次浏览 1303人参与
# 机械制造秋招总结 #
30481次浏览 354人参与
# 如果不工作真的会快乐吗 #
60221次浏览 528人参与