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

相关推荐
dFObBIMmai1 分钟前
如何排查SQL存储过程内存溢出_优化大数据量临时表使用
jvm·数据库·python
Devin~Y1 分钟前
大厂 Java 面试实录:Spring Boot/Cloud、Kafka、Redis、JVM、K8s、RAG 一条龙(小Y翻车版)
java·jvm·spring boot·redis·spring cloud·kafka·kubernetes
m0_470857643 分钟前
mysql如何快速撤销所有数据库更改_通过事务回滚机制实现
jvm·数据库·python
iuvtsrt3 分钟前
SQL触发器中调用外部接口如何操作_配置外部存储过程引用
jvm·数据库·python
m0_740653227 分钟前
Redis如何查询附近的人_利用GEORADIUS指令进行Geo范围搜索
jvm·数据库·python
Jetev7 分钟前
宝塔面板如何实现网站重定向_配置301永久跳转与域名更换
jvm·数据库·python
2401_833033628 分钟前
c++如何解析二进制协议中的可选字段与默认值读取逻辑实现【实战】
jvm·数据库·python
m0_5913647315 分钟前
CSS 背景图滑动切换:纯 CSS 实现右进左出轮播效果
jvm·数据库·python
2401_8242226916 分钟前
Python测试代码如何实现自解释_使用pytest描述性命名规范
jvm·数据库·python
woxihuan12345619 分钟前
MySQL 中高效存储与查询时间数据的最佳实践
jvm·数据库·python