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 对老年代空间进行清理和压缩。

相关推荐
ffqws_6 小时前
MyBatis 动态 SQL 详解:从原理到实战
java·sql·mybatis
浮尘笔记6 小时前
在Snowy后台无需编码实现自动化生成CRUD操作流程
java·开发语言·经验分享·spring boot·后端·程序人生·mybatis
-星空下无敌6 小时前
IDEA 2025.3.1最新最全下载、安装、配置及使用教程(保姆级教程)
java·ide·intellij-idea
2401_846339566 小时前
CSS如何解决Less与CSS兼容性问题_通过配置文件实现平滑过渡与混合开发
jvm·数据库·python
qq_413847407 小时前
CSS如何控制全屏显示的元素样式
jvm·数据库·python
JAVA面经实录9177 小时前
Spring Boot + Spring AI 一体化实战全文档
java·人工智能·spring boot·spring
希望永不加班7 小时前
SpringBoot 接口签名验证(AppKey/Secret)
java·spring boot·后端·spring
阿正呀7 小时前
CSS粘性定位不生效怎么办_检查父元素高度与overflow属性设置
jvm·数据库·python
2403_883261097 小时前
如何获取DDL语句_DBMS_METADATA.GET_DDL提取对象定义
jvm·数据库·python
m0_613856297 小时前
mysql数据库乱码如何解决_mysql字符集与校对规则配置方法
jvm·数据库·python