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

相关推荐
user_admin_god2 分钟前
Spring Boot 3 + WebFlux 企业级流式SSE接口最佳实践
java·spring boot·后端
雨落在了我的手上6 分钟前
初识java(四):程序逻辑控制
java·开发语言·前端
p***76987 分钟前
docker compose安装mindoc 后添加https访问反向代理配置教程
jvm·docker·https
她说彩礼65万7 分钟前
C# WIFI连接状态检测方法
java·spring·c#
_Evan_Yao13 分钟前
责任链模式在Agent编排中的应用:让AI Agent学会“踢皮球”
java·人工智能·后端·责任链模式
lvrongbao22 分钟前
互联网大厂Java面试场景:从Spring到Redis的技术问答解析
java·redis·spring·微服务·分布式事务
霸道流氓气质23 分钟前
Spring AI Advisor 完全指南:拦截器机制与实战全解
java·人工智能·spring
XiYang-DING23 分钟前
【Java EE】 HTTPS协议
java·https·java-ee
yqcoder23 分钟前
突破性能瓶颈:深入理解 JavaScript TypedArray
java·开发语言·javascript
techdashen24 分钟前
Agent 的第三次浪潮:Cloudflare Project Think 是什么,要解决什么问题
jvm·数据库·oracle