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

相关推荐
秋96 分钟前
java中对操作mysql8.0.46与MySQL9.7.0有什么区别,并举例说明
android·java·adb
YOU OU9 分钟前
JVM基础知识
开发语言·jvm
神仙别闹13 分钟前
基于Python实现一个C语言的编译器
java·c语言·python
冷小鱼18 分钟前
JVM 深度调优实战:从 JDK 8 到 JDK 21 的演进与中间件落地
java·jvm·中间件
玛卡巴卡ldf21 分钟前
【LeetCode 手撕算法】(回溯)全排列DFS、子集、电话号码字母组合 九键、组合总和、括号生成、单词搜索、分割回文数
java·算法·leetcode·力扣
极客先躯21 分钟前
高级java每日一道面试题-2025年12月06日-实战篇[Dockerj]-如何配置 Docker 的镜像加速器?国内有哪些常用加速源?
java·docker·配置docker的镜像加速器·国内有哪些常用加速源·镜像加速器的本质与配置原理·镜像拉取流程对比·加速前后架构差异
隐退山林23 分钟前
JavaEE进阶:SpringIoC&DI
java·开发语言·java-ee
水煮白菜王23 分钟前
Claude Code 全方位使用手册
java·开发语言·网络
kiku181824 分钟前
Docker高级管理--Dockerfile镜像制作
java·docker·eureka
ooseabiscuit30 分钟前
Laravel10.x重磅发布:新特性全解析
android·java·开发语言·mysql