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

相关推荐
无心水1 天前
【分布式利器:腾讯TSF】10、TSF故障排查与架构评审实战:Java架构师从救火到防火的生产哲学
java·人工智能·分布式·架构·限流·分布式利器·腾讯tsf
Boilermaker19921 天前
[Java 并发编程] Synchronized 锁升级
java·开发语言
Cherry的跨界思维1 天前
28、AI测试环境搭建与全栈工具实战:从本地到云平台的完整指南
java·人工智能·vue3·ai测试·ai全栈·测试全栈·ai测试全栈
alonewolf_991 天前
JDK17新特性全面解析:从语法革新到模块化革命
java·开发语言·jvm·jdk
一嘴一个橘子1 天前
spring-aop 的 基础使用(啥是增强类、切点、切面)- 2
java
sheji34161 天前
【开题答辩全过程】以 中医药文化科普系统为例,包含答辩的问题和答案
java
恋爱绝缘体11 天前
2020重学C++重构你的C++知识体系
java·开发语言·c++·算法·junit
weixin_465790911 天前
电动汽车有序充电:电网负荷削峰填谷的新利器
jvm
wszy18091 天前
新文章标签:让用户一眼发现最新内容
java·python·harmonyos
wszy18091 天前
顶部标题栏的设计与实现:让用户知道自己在哪
java·python·react native·harmonyos