关注
我们知道,目前主流的虚拟机实现都采用了分代收集的思想,把整个堆区划分为新生代和老年代;新生代又被划分成 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 评论
相关推荐
12-17 16:05
浙江大学 Java 点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 2025年终总结 #
148543次浏览 2528人参与
# 秋招落幕,你是He or Be #
3350次浏览 76人参与
# 应届生进小公司有什么影响吗 #
109148次浏览 1116人参与
# 比亚迪工作体验 #
70259次浏览 254人参与
# 你面试体验感最差/最好的公司 #
3237次浏览 56人参与
# 工作中听到最受打击的一句话 #
2655次浏览 61人参与
# 大厂VS公务员你怎么选 #
71389次浏览 660人参与
# 重来一次,你会对开始求职的自己说 #
3103次浏览 71人参与
# 一人说一个提前实习的好处 #
3546次浏览 71人参与
# 团建是“福利”还是是 “渡劫” #
4132次浏览 110人参与
# 实习没事做是福还是祸? #
8522次浏览 135人参与
# 如何排解工作中的焦虑 #
244059次浏览 2241人参与
# 从顶到拉给所有面过的公司评分 #
144833次浏览 518人参与
# 今年你最想重开的一场面试是? #
1488次浏览 25人参与
# 你小心翼翼的闯过多大的祸? #
7091次浏览 109人参与
# 联影求职进展汇总 #
123872次浏览 781人参与
# OPPO求职进展汇总 #
755971次浏览 5390人参与
# 互联网公司爆料 #
158627次浏览 724人参与
# 产品实习,你更倾向大公司or小公司 #
189149次浏览 2053人参与
# 秋招结束之后的日子 #
113935次浏览 1039人参与
小天才公司福利 1304人发布
