JVM分代收集算法---最详细易懂的图解方式

JVM分代收集算法图解

  • 在第一次进行Minor GC时,对于Eden区新创建的对象大部分是垃圾对象,对于少数活跃的对象会被复制到Survival To区中,并且让其寿命加1,内存图如下图所示。
    在这里插入图片描述

  • 紧接着会把To区的对象都会被通过复制算法,复制到From区。此时Eden区和Survival To区的都是空闲的,内存图如下所示:
    在这里插入图片描述

  • 程序继续运行,经过第一次GC,Eden又可以保存新建对象了,随着程序的运行,此时Eden区的内存又满了。需要进行第二次GC操作,同第一次一样,暂时活跃的对象,需要复制到Survival To区,同时当熬过这一次GC时,对象的年龄加1,进行保存。和第一次GC不同的是,此时Survival From区中也有幸存的对象,这时,需要根据Survival From区的对象年龄大小来确定该区中对象的去向,看其年龄是否达到设定的指定阈值。如果达到指定阈值,会被分配到Old Generation,如果没有则会被复制到Survival To区,当熬过这一次GC时,From区的年龄也会加1,具体内存分配图如下所示:
    在这里插入图片描述

  • 紧接着会把Survival To区的对象,复制到Survival From中去。这时候Eden和Survival区中的内存就空余出来了,供后续新创建的对象来存储,经过第二次GC后的内存分配图:
    在这里插入图片描述

  • GC会一直重复这样的过程,有的对象会进入到老年区,有的则会游离在To和From之间,游离在两者之间的对象可能会达到阈值,到达老年代中。当“To”区被填满,这时“To”区被填满之后,会将所有对象移动到年老代中,当老年代空间被用完,就要进行 Full GC了。

  • 如果新生代老年代中的内存都满了,就会先触发Minor Gc,再触发Full GC,扫描新生代和老年代中所有不再使用的对象并回收
    Full GC当老年代内存不足,即老年代的垃圾回收。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值