6. 新生代的作用和survivor区的作用

本文深入解析新生代及Survivor区的作用,阐述为何设置新生代和Survivor区,探讨不使用Survivor区的替代方案,详述新生代采用的复制算法原理及其工作流程,解释设置两个Survivor区防碎片化的必要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

区域简图

#### 新生代使用的回收算法

在了解新生代的作用和新生代中 survivor 区的作用之前,我们先了解为什么会有新生代以及为什么会有 survivor 区

新生代的作用和survivor区的作用

为什么会有新生代

新生代主要是存放新创建的对象,新对象的生命周期一般也就会随着方法的执行完毕而终结。GC的时候会优先清理新生代,这样更容易清理出很大的空间来,没有很大的对象,存活对象较少。

存在新生代的原因主要是:减少老年代的Full GC频率和存放新创建的对象方便清理

为什么会有 survivor 区

我们把新生代中的 eden 区,survivor区和老年代看做 板凳队,预备队和主力队

所有小萌新都会先去到板凳队,一些重量级的大佬就会直接到主力队,我们也知道主力队的人数是有限的,所以不能让你直接从板凳队晋升到主力队,所以你得在预备队经过考验才可以,而 survivor 担任的就是预备队的角色

转换一下:

新生代中的对象最终的归宿要么被清理,要么进入老年代,我们知道老年代的内存空间有限,进行一次Full Gc 要消耗很多时间,所以为了减少老年代发生 Gc的频率,我们要让新生代的对象在survivor区中经过一定次数的Minor Gc 才能有资格进入到老年代,经受不住这个考验的就直接在新生代被淘汰掉了

survivor 区起到了一个承接的过程,保证存活的对象不会直接进入到老年代

不使用 survivor 区的解决办法
方案优点缺点
增加老年代空间降低Full GC频率一次Full GC执行需要时间更长
减少老年代空间Full GC所需时间减少Full GC频率增加
新生代使用的回收算法

因为新生代的对象生命周期都很短,能够存活下来的对象很少,并且对象占的的内存也比较小,所以使用复制算法。

复制算法的思想

就是将内存分为两块,每次使用其中一块,一块内存使用完了之后就会将存活的对象复制到另一块内存中。所以复制算法不会产生碎片

复制算法的工作流程
  • 当开始GC的时候对象只会存在于eden 和 From-Survivor 区
  • GC过程中会把 eden 中存活的对象复制到 To-Survivor 区,From-Survivor 区会根据年龄来决定对象是否去老年代
  • From和To的角色交换
  • 如果To区填满了,会将所有的对象移动到老年代在这里插入图片描述
设置两个Survivor区的作用

设置两个Survivor区的最大作用是为了防止碎片化

当只有一个survivor区的时候,每一次清理新生代都会将对象复制到 survivor 区,而 survivor 区也是会经历Minor GC的,这样就会导致部分空间不能够存放一下一个完整的对象,这样就导致了空间的不连贯性,产生碎片化。

在这里插入图片描述

两块survivor区的话其中有一块空间始终的空的,可以通过复制算法将新生代和另一块 survivor 区中的对象全部复制过去,这样复制过去的对象是连续的
在这里插入图片描述

在Java虚拟机(JVM)的内存模型中,堆内存被分为新生代老年代,而新生代又细分为Eden两个SurvivorSurvivorFromSurvivorTo)。Eden通常是对象初次创建的地方,而Survivor则用于存放经历了一次或多次垃圾回收后仍然存活的对象。根据JVM设置的不同,对象在Survivor中的存活时间可以是不同的阈值。当Eden满时,会触发一次称为Minor GC的垃圾回收过程,将EdenSurvivorFrom中存活的对象复制到SurvivorTo,然后将这两个域清空。如果对象在Survivor经历足够多次的Minor GC后仍然存活,它将被提升至老年代中。这个过程体现了分代收集算法的核心,即根据对象的生命周期长短选择不同的垃圾回收策略。新生代的这种设计是为了优化垃圾回收的效率,因为大部分对象生命周期较短,只有少数对象能够存活至老年代。了解这一内存管理机制对于Java开发者来说非常重要,它有助于编写高性能的应用程序并有效应对面试中的相关问题。为了深入理解JVM内存垃圾回收的工作原理,推荐阅读《Java面试必备:JVM内存与垃圾回收深度解析》一书,它包含了详细的概念讲解面试中经常被问到的问题,能够帮助开发者系统地掌握JVM相关知识。 参考资源链接:[Java面试必备:JVM内存与垃圾回收深度解析](https://wenku.csdn.net/doc/b18dt45q4f?spm=1055.2569.3001.10343)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值