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

相关推荐
噢,我明白了5 分钟前
Java 入门,详解List,Map集合使用
java·list·map
ZenosDoron9 分钟前
函数形参传数组
java·jvm·算法
一只幸运猫.11 分钟前
字节跳动Java大厂面试版
java·开发语言·面试
2301_8135995514 分钟前
如何监控表空间自动扩展_DBA_DATA_FILES中的MAXBYTES分析
jvm·数据库·python
xier_ran19 分钟前
【C++】“内部”、“外部”、“派生类”、“友元“类
java·开发语言·c++
m0_7164300724 分钟前
mysql数据库表名区分大小写吗_通过lower case table names配置
jvm·数据库·python
凭君语未可29 分钟前
从静态代理走向动态代理:理解 JDK 动态代理的本质
java·开发语言
黑风风33 分钟前
在 Windows 上设置 MAVEN_HOME 环境变量(完整指南)
java·windows·maven
Rsun0455135 分钟前
15、Java 观察者模式从入门到实战
java·python·模板方法模式
珹洺38 分钟前
Java-Spring入门指南(二十三)俩万字超详细讲解利用IDEA手把手教你实现SSM(Spring + SpringMVC + MyBatis)整合,并构建第一个SSM基础系统
java·spring·intellij-idea