JVM中的GC流程与对象晋升机制


💖The Begin💖点点关注,收藏不迷路💖

在Java虚拟机(JVM)中,垃圾回收(GC)是自动管理内存的关键机制。

1、JVM堆内存结构

Java堆是JVM中用于存放对象实例的内存区域,它被划分为新生代(Young Generation)和老年代(Old Generation)。新生代又进一步细分为Eden区、两个Survivor区(S0和S1,也称为From和To区,它们通过复制算法交换角色)。

2、Minor GC流程

当Eden区的空间被新创建的对象填满时,JVM会触发Minor GC(也称为Young GC)。Minor GC的目标是清理新生代中的垃圾对象,回收其占用的内存空间。

  • 收集与清理:JVM会扫描Eden区和当前的Survivor区(如S0),标记出存活的对象。
  • 复制与交换:存活的对象会被复制到另一个空的Survivor区(如S1),同时清空Eden区和原来的Survivor区(S0)。这时,S0和S1的角色会互换。
  • 对象晋升:在Minor GC过程中,如果对象满足以下条件之一,它们会被直接晋升到老年代:
    • 大对象:需要大量连续内存空间的对象,这些对象在创建时如果Eden区剩余空间不足,会直接分配到老年代。
    • 长期存活:对象在Eden区出生,并经过多次Minor GC后仍然存活,并且被Survivor区容纳。每次Minor GC后,对象的年龄(即经过的Minor GC次数)会增加。当年龄达到JVM设定的阈值(默认为15)时,对象会被晋升到老年代。

3、Full GC流程

当老年代空间不足时,JVM会触发Full GC(也称为Major GC或Old GC)。Full GC会清理整个堆内存,包括新生代和老年代。

  • 停止-复制/标记-清除/标记-整理:根据JVM使用的垃圾回收器类型(如Serial GC、Parallel GC、CMS、G1等),Full GC会采用不同的算法来清理垃圾对象。这些算法包括停止-复制、标记-清除和标记-整理等。
  • 性能影响:Full GC通常比Minor GC慢得多,因为它需要处理整个堆内存。在Full GC期间,应用程序的线程会暂停(Stop-The-World),直到GC完成。

4、总结

通过合理设置JVM参数、优化代码逻辑和内存使用,可以减少GC的频率和持续时间,提高应用的响应速度和吞吐量。

在这里插入图片描述


💖The End💖点点关注,收藏不迷路💖
评论 77
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Seal^_^

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值