一:什么时候会触发Full GC


1. 调用 System.gc()

只是建议虚拟机执行 Full GC,但是虚拟机不一定真正去执行。不建议使用这种方式,而是让虚拟机管理内存。

2. 未指定老年代和新生代大小,堆伸缩时会产生fullgc,所以一定要配置-Xmx、-Xms

3. 老年代空间不足

老年代空间不足的常见场景比如大对象、大数组直接进入老年代、长期存活的对象进入老年代等。

为了避免以上原因引起的 Full GC,应当尽量不要创建过大的对象以及数组。

除此之外,可以通过 -Xmn 虚拟机参数调大新生代的大小,让对象尽量在新生代被回收掉,不进入老年代。

还可以通过 -XX:MaxTenuringThreshold 调大对象进入老年代的年龄,让对象在新生代多存活一段时间。

在执行Full GC后空间仍然不足,则抛出错误:java.lang.OutOfMemoryError: Java heap space

4. JDK 1.7 及以前的(永久代)空间满

在 JDK 1.7 及以前,HotSpot 虚拟机中的方法区是用永久代实现的,永久代中存放的为一些 Class 的信息、常量、静

态变量等数据。

当系统中要加载的类、反射的类和调用的方法较多时,永久代可能会被占满,在未配置为采用 CMS GC 的情况下也

会执行 Full GC。

如果经过 Full GC 仍然回收不了,那么虚拟机会抛出java.lang.OutOfMemoryError PermGen space

为避免以上原因引起的 Full GC,可采用的方法为增大Perm Gen或转为使用 CMS GC。

5. 空间分配担保失败

空间担保,下面两种情况是空间担保失败:

1、每次晋升的对象的平均大小 > 老年代剩余空间

2、Minor GC后存活的对象超过了老年代剩余空间

注意GC日志中是否有promotion failed和concurrent mode failure两种状况,当出现这两种状况的时候就有可能会触发Full GC。

promotion failed 是在进行 Minor GC时候,survivor space空间放不下只能晋升老年代,而此时老年代也空间不足时发生的。

concurrent mode failure 是在进行CMS GC过程,此时有对象要放入老年代而空间不足造成的,这种情况下会退化使用Serial Old收集器变成单线程的,此时是相当的慢的。

怎么调优

围绕一个点,策略就是尽量把对象在新生代使用回收,减少晋升老年代的几率。

什么时候会触发Full GC相关推荐

  1. java触发full gc的几种情况概述

    前言 近期被问及这个问题,在此记录整理一下. System.gc()方法的调用 此方法的调用是建议JVM进行Full GC,虽然只是建议而非一定,但很多情况下它会触发 Full GC,从而增加Full ...

  2. 触发Full GC执行的情况 以及其它补充信息

    除直接调用System.gc外,触发Full GC执行的情况有如下四种.1. 旧生代空间不足旧生代空间只有在新生代对象转入及创建为大对象.大数组时才会出现不足的现象,当执行Full GC后空间仍然不足 ...

  3. 触发Full GC的原因

    当年轻代晋升到老年代的对象大小,并比目前老年代剩余的空间大小还要大时,会触发Full GC: 当老年代的空间使用率超过某阈值时,会触发Full GC: 当元空间不足时(JDK1.7永久代不足),也会触 ...

  4. 由「Metaspace容量不足触发CMS GC」从而引发的思考

    转载自  由「Metaspace容量不足触发CMS GC」从而引发的思考 某天早上,毛老师在群里问「cat 上怎么看 gc」. 好好的一个群 看到有 GC 的问题,立马做出小鸡搓手状. 之后毛老师发来 ...

  5. full gc JAVA_java触发full gc的几种情况概述

    前言 近期被问及这个问题,在此记录整理一下. System.gc()方法的调用 此方法的调用是建议JVM进行Full GC,虽然只是建议而非一定,但很多情况下它会触发 Full GC,从而增加Full ...

  6. 利用Arena Allocation避免HBase触发Full GC

    Arena Allocation,是一种GC优化技术,它可以有效地减少因内存碎片导致的Full GC,从而提高系统的整体性能.本文介绍Arena Allocation的原理及其在Hbase中的应用-M ...

  7. java 手动触发gc_java触发full gc的几种情况整理

    前言 近期被问及这个问题,在此记录整理一下. System.gc()方法的调用 此方法的调用是建议JVM进行Full GC,虽然只是建议而非一定,但很多情况下它会触发 Full GC,从而增加Full ...

  8. young GC和Full GC的区别、什么时候触发young gc和Full GC、如何优化GC

    young GC 和 Full GC 的含义及区别? young GC(新生代GC):指发生在新生代的垃圾收集动作,新生代中的对象朝生夕死,所以 Minor GC 非常频繁,回收速度也比较快. Ful ...

  9. jvm什么时候会触发full gc

    除直接调用System.gc外,触发Full GC执行的情况有如下四种. 1. 旧生代空间不足 旧生代空间只有在新生代对象转入及创建为大对象.大数组时才会出现不足的现象,当执行Full GC后空间仍然 ...

最新文章

  1. iOS 录音转MP3格式
  2. 基于NopCommerce的开源电商系统改造总结
  3. 如何查询SAP Cloud for Customer系统升级和维护时间
  4. Java基础学习总结(153)——HashMap、Hashtable、ConcurrentHashMap的原理与区别
  5. asp.net listview 单元格文字颜色_Excel – 如何批量修改单元格中部分关键字的字体颜色?...
  6. csdn博客图片复制不过来怎么办?如何转载?
  7. Win10安装JDK与配置环境变量
  8. Linux添加虚拟网卡的多种方法
  9. Insyde uefi 隐藏设置_vivo手机怎么隐藏应用 vivo手机怎样把软件隐藏起来?
  10. 怎么用按键精灵快速开发计算距离自己最近的怪物/包裹/金矿坐标的脚本
  11. 浅谈专科程序员的出路
  12. linux 中移动文件_如何在Linux中移动文件
  13. WordPress 安全漏洞
  14. 计算机二级的公共基础课水平测试,计算机二级公共基础知识复习试题含答案
  15. 淘宝电商评论数据可视化分析系统-电商评论分析系统
  16. mybatis 的入参和出参
  17. c语言查询学号(字符串),c语言短学期
  18. 倍福ADS通讯(一)——ADS通讯简介
  19. What is a Digital Signature?
  20. ssh提示IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY解决

热门文章

  1. 区间问题,Huffman树,排序不等式,绝对值不等式,推公式
  2. Siri之父下周将推出全新AI机器人VIV
  3. java 内部类声明 抽象类_Java 抽象类、接口、内部类
  4. 直播软件开发Android直播悬浮窗实现
  5. 2022年苹果二手报价最新
  6. 迪士尼FAMA认证作用及取得FAMA注意事项
  7. [USACO09MAR]向右看齐Look Up(单调栈、在线处理)
  8. PERCENT(SQL)
  9. JS 删除Object中属性
  10. 微信公众号开发测试帐号