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

相关推荐
QC班长3 小时前
Maven公司私库配置踩坑点
java·服务器·maven·intellij-idea
Makoto_Kimur3 小时前
java开发面试-AI Coding速成
java·开发语言
wuqingshun3141594 小时前
说说mybatis的缓存机制
java·缓存·mybatis
空中海4 小时前
Kubernetes 生产实践、可观测性与扩展入门
java·贪心算法·kubernetes
Devin~Y4 小时前
大厂Java面试实录:Spring Boot/Cloud、Kafka、Redis、K8s 与 Spring AI(RAG/Agent)三轮连环问
java·spring boot·redis·mysql·spring cloud·kafka·kubernetes
bLEd RING4 小时前
SpringBoot3.3.0集成Knife4j4.5.0实战
java
小松加哲5 小时前
Spring MVC 核心原理全解析
java·spring·mvc
Ulyanov5 小时前
《PySide6 GUI开发指南:QML核心与实践》 第二篇:QML语法精要——构建声明式UI的基础
java·开发语言·javascript·python·ui·gui·雷达电子对抗系统仿真
码界筑梦坊5 小时前
357-基于Java的大型商场应急预案管理系统
java·开发语言·毕业设计·知识分享
云烟成雨TD5 小时前
Spring AI Alibaba 1.x 系列【31】集成 Studio 模块实现可视化 Agent 调试
java·人工智能·spring