JVM GC原理解析

JVM GC原理

  1.JVM 的内存空间,从大的层面上来分析包含:新生代空间和老年代空间。  

 新生代空间又被分为2各部分(Eden区域、Survious区域) 和3个板块(1个Eden区域和2个Survious区域)

其中:
1)***Eden区域(伊甸园)***:用来存放使用new或者newInstance 等方式创建的对象,默认这些都是存放在Eden区域,除了这个对象太大,或者超出了设定的阈值,这样的对象会被直接分配到Old区域。

2)2个Survious区域(幸存):一般称为S0、S1,理论上他们一样大。

第一次GC:

在不断创建对象的过程中,当Eden区域被占满,此时会开始做Young GC也叫Minor GC
1)第一次GC时Survivous中S0区和S1区都为空,将其中一个作为To Survivous(用来存储Eden区域执
行GC后不能被回收的对象)。比如:将S0作为To Survivous,则S1为From Survivous。
2)将Eden区域经过GC不能被回收的对象存储到To Survivous(S0)区域(此时Eden区域的内存会
在垃圾回收的过程中全部释放),但如果To Survivous(S0)被占满了,Eden中剩下不能被回收对象
只能存放到Old区域。
3)将Eden区域空间清空,此时From Survivous区域(S1)也是空的。
4)S0与S1互相切换标签,S0为From Survivous,S1为To Survivous。

第二次GC:
当第二次Eden区域被占满时,此时开始做GC
1)将Eden和From Survivous(S0)中经过GC未被回收的对象迁移到To Survivous(S1),如果To
Survious(S1)区放不下,将剩下的不能回收对象放入Old区域;
2)将Eden区域空间和From Survivous(S0)区域空间清空;
3)S0与S1互相切换标签,S0为To Survivous,S1为From Survivous。

第三次,第四次一次类推,始终保证S0和S1有一个空的,用来存储临时对象,用于交换空间的目的。反反复复多次没有被淘汰的对象,将会被放入Old区域中,默认15次(由参数--XX:MaxTenuringThreshold=15 决定)。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值