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

相关推荐

  1. jvm 触发GC时机条件

    2024-06-06 17:52:05       7 阅读
  2. JVM中 Minor GC Full GC 区别

    2024-06-06 17:52:05       37 阅读
  3. JVM各种垃圾回收器(GC)

    2024-06-06 17:52:05       19 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-06 17:52:05       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-06 17:52:05       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-06 17:52:05       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-06 17:52:05       18 阅读

热门阅读

  1. 分析JVM堆Dump日志定位线程阻塞原因

    2024-06-06 17:52:05       10 阅读
  2. 进口单座调节阀的特点

    2024-06-06 17:52:05       10 阅读
  3. 二叉树的右视图-力扣

    2024-06-06 17:52:05       7 阅读
  4. python脚本将视频抽帧为图像数据集

    2024-06-06 17:52:05       9 阅读
  5. Golang获取文件名扩展名/后缀

    2024-06-06 17:52:05       8 阅读
  6. Nginx的负载均衡(加权轮询)

    2024-06-06 17:52:05       7 阅读
  7. 【Power Compiler手册】6.反标翻转活动

    2024-06-06 17:52:05       9 阅读
  8. C++基础-编程练习题和答案(数组)

    2024-06-06 17:52:05       8 阅读