当前位置:   article > 正文

jvm 触发GC的时机和条件

jvm 触发GC的时机和条件

GC的种类

GC又分为 minor GC 和 Full GC (也称为 Major GC )

minor GC:轻GC

Full GC(Major GC):重GC

Major GC的速度一般会比Minor GC慢十倍以上

什么时候触发GC 

  • 程序调用System.gc时可以触发,也不是立即触发,只是发了个通知要触发,时机由jvm自行调度
  • 系统自身来决定GC触发的时机,根据各区域内存大小以及垃圾回收器的参数设置

Minor GC触发条件 

java对堆分成了几个逻辑区域,其中新生代分为Eden,幸存者区,当新生代的Eden区满时,就会触发Minor GC

因为Java对象大多都具有朝生暮死的特点,所以Minor GC十分频繁,回收速度也较快,一般采用的算法为复制算法

 Full GC触发条件

  • 调用System.gc时,系统建议执行Full GC
  • 老年代空间不足时调用
  • 方法区空间不足时调用
  • 通过Minor GC后进入老年代的平均大小大于老年代的可用内存
  • 由Eden区、From Space区向To Space区复制时,对象大小大于To Space可用内存,则把该对象转存到老年代,且老年代的可用内存小于该对象大小
  • GC担保失败

GC担保失败

在发生Minor GC之前,JVM会检查老年代最大可用的连续空间是否大于新生代所有对象总空间。如果条件成立,那么Minor GC是安全的

反之,如果不成立,那么要仍然要看HandlePromotionFailure值,是否允许担保失败。

如果允许担保失败,那么会继续检查老年代最大可用的连续空间是否大于历次晋升到老年代对象的平均大小,如果大于,则冒险尝试一次Minor GC,如果小于或者不允许担保失败,则要进行一次Full GC

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/684355
推荐阅读
相关标签
  

闽ICP备14008679号