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

相关推荐
一直都在5721 分钟前
AQS详解
java·开发语言
sheji34165 分钟前
【开题答辩全过程】以 校园帮系统为例,包含答辩的问题和答案
java·spring boot
koping_wu5 分钟前
【Java并发】CompletableFuture详解:常用API和底层原理
java·开发语言·python
填满你的记忆8 分钟前
《Java 面试常见题型(2026最新版,背完直接能面)》
java·开发语言
小松加哲8 分钟前
# Spring Aware 与 BeanPostProcessor:作用、使用与原理(源码级)
java·后端·spring
Rick19938 分钟前
JVM 高频10问
jvm
小松加哲12 分钟前
Spring AOP 代理创建时机深度解析:初始化阶段 vs 三级缓存(源码级)
java·spring·缓存
Mr_Xuhhh17 分钟前
LeetCode 热题 100 刷题笔记:从数组到字符串的经典解法(续)
java·数据结构·算法
皙然19 分钟前
AQS模型详解:Java并发的核心同步框架(从原理到实战)
java·开发语言·jvm
愤豆22 分钟前
08-Java语言核心-JVM原理-垃圾收集详解
java·开发语言·jvm