GC 中的 promotion failed

1 什么是promotion failed

promotion是“晋升”的意思,promotion failed当然是“晋升失败”了,在JVM GC的世界里,也有类似人类社会中的分等分级的概念,我所说的是对象是被区分对待的,有用(存在引用)的对象会在垃圾回收的过程中被晋升到较高等级的内存区域,然而有时候会出现一些意外,导致对象晋升失败,这就是promotion failed,无用(没有引用)对象会被清除从而释放其所占用的资源。

2 什么情况下会发生promotion failed

如果说整个堆一共分为新生代(level=0)和老年代(level=1)两个等级的话,那么年轻代也分为eden(伊甸园)区和survivor(幸存)区两个内存等级。注意对象晋升的大环境是年轻代GC,因为老年代已经是最高等级区域了,不存在再次晋升的情况。对象晋升的路线是eden→survivor或者是eden→old,因为当有用对象从eden区域晋升到survivor区域的时候有可能会晋升失败,因此会GC线程会再尝试直接往老年代晋升,同样晋升有可能失败。那么什么时候会被认为是晋升失败呢?有两种情况,一种情况是基于历史统计数据,比如统计数据显示历史上平均每次晋升对象的大小是av_promo,而当前老年代的空间并不足以存放av_promo大小的对象,则GC线程认为实际晋升的过程中可能会发生失败,晚失败不如早点失败,这种策略虽然会略有些悲观,但是实际上是这么做的࿰

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值