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

相关推荐
薛之谦_4 小时前
Java 全栈知识体系:从 IDEA 高效开发到 JVM、并发与 Stream 实战
java·jvm·intellij-idea
jyOverQ9 小时前
从零学 JVM(六):垃圾回收算法详解——标记清除、标记复制与标记整理
jvm·算法
金銀銅鐵13 小时前
带您看懂字节码指令(三):一行加法里有什么
java·jvm
jyOverQ16 小时前
从零学 JVM(七):垃圾收集器详解——Serial、ParNew、Parallel、CMS 与 G1
java·jvm
金銀銅鐵1 天前
带您看懂字节码指令(三):同一行加法,为什么有四种指令
java·jvm
jyOverQ1 天前
从零学 JVM(五):垃圾回收机制——对象存活判断与 GC Roots
jvm
金銀銅鐵2 天前
一个 4 个常量的枚举,Kotlin 在字节码里生成了什么
jvm·kotlin
2301_808414382 天前
Linux线程的同步与互斥
jvm
曲径海盗2 天前
Try-Except怎么用,3个追问解答在自动化下的应用
java·jvm·oracle
寂寞的船6 天前
【Unity知识速递】第10期 Unity GC 零分配实战:从 UnityEngine.Pool 到手动 GC 控制的全链路优化
jvm·unity·c#·游戏引擎·lucene