JVM一次完整的GC流程

1.判断对象进入年轻代还是老年代

GC一般发生在对象创建时分配空间的过程中,当对象创建时会根据对象的大小决定对象是进入年轻代还是老年代。当对象大小超过一定的阈值就会被认为大对象,大对象会直接进入老年代,否则会进入年轻代。

2.在年轻代创建对象

年轻代创建对象一般会在Eden区,但是当Eden区空间不够时会触发一次Young GC 。YongGC过程中会将Eden区和From Survivor区存活的对象复制到To Survivor区,然后将Eden区和From Survivor区的对象清理掉。

但是如果To Survivor区的空间存不下这些对象,那就需要进行空间分配担保,如果担保成功就正常进行Young GC,如果担保失败则说明老年代空间也不够了,这时候会触发一次Full GC。

在年轻代中长期存活的对象,当GC次数达到一定的阈值后还没有被回收,它也会被放到老年代中。

3.老年代中创建对象 

 当我们老年代中的空间不够了,或者前面提到的空间担保失败了就会触发Full GC。如果Full GC之后空间还是不够,这时候JVM会抛出内存不足的异常即OOM。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值