JVM Young GC

首先,我们假设程序当前的堆空间的情况如下:

然后,程序在运行过程中,开始了我们的第一次YoungGC(年轻代GC),得到如下的图:

通过这次的GC,我们的2、3、4对象都被回收了,只有1对象得到了保留,进入了S1(幸存者区),然后我们的程序在运行的过程中还会产生新的对象,这个时候可能是下面这样的:

然后程序在不停的运行过程中,又开始GC了,这个时候就需要对Eden和S1做垃圾回收的工作了,结果可能是这样的:

通过这个图,我们可以看出,Eden和S1两个区域的有效对象都进入了S2区域,然后程序继续运行,继续产生新对象,如下:

然后程序在不停的运行过程中,又开始GC了,这个时候就需要对Eden和S2做垃圾回收的工作了,结果可能是这样的:

Eden区的10、11、12对象和S2区的1对象都被回收了,只剩下5、9两个对象进入了S1区,之后一直重复这样的动作,发现有几个对象经过了几遍GC一直都在(或者s1、s2其中一个空间不足),这个时候就需要把对象迁移到Old区,可能如下图所示:

完成了上面的动作之后,程序依然按上面的流程继续跑,GC也按上面的流程继续跑,但是Old也总有满的一天,这个时候就会产生OldGC(老年代GC),然后就可能是下面的情况

Old区域的对象9被回收了,只保留了对象5。


原文链接:https://blog.csdn.net/u010520626/article/details/121196361

相关推荐
小江的记录本6 小时前
【JVM虚拟机】堆内存分代模型:年轻代(Eden+Survivor)、老年代、元空间Metaspace(附《思维导图》+《面试高频考点清单》)
java·前端·jvm·后端·python·spring·面试
思麟呀12 小时前
C++11并发编程:call_once一次性执行+atomic原子类型+CAS无锁编程+自旋锁
linux·开发语言·jvm·c++·windows
Fanfanaas14 小时前
C++ 继承
java·开发语言·jvm·c++·学习·算法
周杰伦fans16 小时前
C# 异常继承深度解析:从设计原则到 sealed 关键字的奥秘
java·jvm·c#
小L写Java17 小时前
第三章:Java 内存模型 (JMM) 与运行时数据区
java·jvm
在繁华处20 小时前
Java从零到熟练(十):JVM基础与性能优化
java·jvm·性能优化
go不是csgo2 天前
GORM 上手:一个 main.go 跑通 Go 数据库增删改查
jvm·数据库·golang
KobeSacre2 天前
JVM G1 垃圾回收器
java·开发语言·jvm
右耳朵猫AI2 天前
Java & JVM技术周刊 2026年第20周
java·开发语言·jvm
小张小张爱学习2 天前
JVM高频面试题
java·jvm