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

相关推荐
Javatutouhouduan10 小时前
Java初学者如何高效学习JVM?
java·jvm·java虚拟机·java面试·后端开发·java程序员·java八股文
2602_9599609213 小时前
电商场景Java面试:Spring Boot、JVM、Redis、Kafka、微服务与分布式事务考点解析——谢飞机的作死面试记
java·jvm·spring boot·redis·面试题
wuminyu14 小时前
JDK21中FFM api的upcall回调机制解析
java·linux·c语言·jvm·c++
松仔log14 小时前
Kotlin中级——协程
java·jvm·kotlin
吴声子夜歌1 天前
Java面试题——JVM(二)
java·开发语言·jvm
Dicky-_-zhang2 天前
大模型部署架构:从推理引擎到弹性扩缩容的工程实践
java·jvm
聊浮游2 天前
JAVA2026最新全套学习资料、学习路线
java·开发语言·jvm·mysql·spring·maven·idea
阿昌喜欢吃黄桃3 天前
RocketMQ 同一 JVM 启动多个 Producer 导致 NameServer 只连一个的问题
jvm·rocketmq·mq
2602_959960923 天前
大厂Java面试:Spring Boot、JVM、Redis、Kafka与Elasticsearch在内容社区UGC场景下的实战拷问
java·jvm·spring boot·redis·面试题
典典分享指南3 天前
用指纹算法给文章去重:mid_signature 实战
jvm·maven·intellij-idea·jetty