JVM 分代垃圾回收过程

堆空间划分了代:

年轻代(Young Generation)分为 eden 和 Survivor 两个区,Survivor 又分为2个均等的区,S0 和 S1。

首先,新对象都分配到年轻代的 eden 空间,Survivor 刚开始是空的。

当 eden 满了以后,minor gc 就被触发了。

还被引用的对象被移到第一个 survivor 空间,然后把整个 eden 空间都清理掉。

下一次 minor gc 时还是同样的过程,把 eden 中还被引用的对象移到 survivor 空间,然后清除 eden 空间,只是这次是移到第二个 survivor(S1),同时,把上次 minor gc 移到 S0 中的对象也移到 S1,并增加这些对象的年龄,移到 S1 之后,S0 也被清理掉,这时,eden 和 S0 都干净了。

下一次 minor gc 同理,只是这次换为了 S0,eden 和 S1 都干净了。

这个过程不断重复,这样 survivor 中对象的年龄会一直增长,当达到一定程度(例如8),这个对象就从年轻代转移到了老年代。

这样,老年代中的对象就持续增加。

最后就会触发 major gc 对老年代空间进行清理和压缩。

相关推荐
静谧空间13 小时前
java登录验证码CaptchaConfig
java·开发语言
Imxyk13 小时前
力扣:632. 最小区间(贪心)
java·数据结构·算法
驱动探索者13 小时前
linux genpool 学习
java·linux·学习
露天赏雪13 小时前
JDK8 的入门避坑指南
java·服务器·windows·spring boot·后端·spring·性能优化
jiaguangqingpanda13 小时前
Day37-20260205
java·开发语言
手握风云-13 小时前
JavaEE 进阶第十六期:MyBatis,查询请求的生命周期全景图(一)
java·java-ee·mybatis
大模型玩家七七13 小时前
安全对齐不是消灭风险,而是重新分配风险
android·java·数据库·人工智能·深度学习·安全
wxin_VXbishe13 小时前
springboot旅游信息管理系统-计算机毕业设计源码21675
java·c++·spring boot·python·spring·django·php
Serene_Dream13 小时前
Java 垃圾收集器
java·jvm·面试·gc
爬山算法13 小时前
Hibernate(86)如何在性能测试中使用Hibernate?
java·后端·hibernate