什么时候会触发Full GC
一:什么时候会触发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相关推荐
- java触发full gc的几种情况概述
前言 近期被问及这个问题,在此记录整理一下. System.gc()方法的调用 此方法的调用是建议JVM进行Full GC,虽然只是建议而非一定,但很多情况下它会触发 Full GC,从而增加Full ...
- 触发Full GC执行的情况 以及其它补充信息
除直接调用System.gc外,触发Full GC执行的情况有如下四种.1. 旧生代空间不足旧生代空间只有在新生代对象转入及创建为大对象.大数组时才会出现不足的现象,当执行Full GC后空间仍然不足 ...
- 触发Full GC的原因
当年轻代晋升到老年代的对象大小,并比目前老年代剩余的空间大小还要大时,会触发Full GC: 当老年代的空间使用率超过某阈值时,会触发Full GC: 当元空间不足时(JDK1.7永久代不足),也会触 ...
- 由「Metaspace容量不足触发CMS GC」从而引发的思考
转载自 由「Metaspace容量不足触发CMS GC」从而引发的思考 某天早上,毛老师在群里问「cat 上怎么看 gc」. 好好的一个群 看到有 GC 的问题,立马做出小鸡搓手状. 之后毛老师发来 ...
- full gc JAVA_java触发full gc的几种情况概述
前言 近期被问及这个问题,在此记录整理一下. System.gc()方法的调用 此方法的调用是建议JVM进行Full GC,虽然只是建议而非一定,但很多情况下它会触发 Full GC,从而增加Full ...
- 利用Arena Allocation避免HBase触发Full GC
Arena Allocation,是一种GC优化技术,它可以有效地减少因内存碎片导致的Full GC,从而提高系统的整体性能.本文介绍Arena Allocation的原理及其在Hbase中的应用-M ...
- java 手动触发gc_java触发full gc的几种情况整理
前言 近期被问及这个问题,在此记录整理一下. System.gc()方法的调用 此方法的调用是建议JVM进行Full GC,虽然只是建议而非一定,但很多情况下它会触发 Full GC,从而增加Full ...
- young GC和Full GC的区别、什么时候触发young gc和Full GC、如何优化GC
young GC 和 Full GC 的含义及区别? young GC(新生代GC):指发生在新生代的垃圾收集动作,新生代中的对象朝生夕死,所以 Minor GC 非常频繁,回收速度也比较快. Ful ...
- jvm什么时候会触发full gc
除直接调用System.gc外,触发Full GC执行的情况有如下四种. 1. 旧生代空间不足 旧生代空间只有在新生代对象转入及创建为大对象.大数组时才会出现不足的现象,当执行Full GC后空间仍然 ...
最新文章
- iOS 录音转MP3格式
- 基于NopCommerce的开源电商系统改造总结
- 如何查询SAP Cloud for Customer系统升级和维护时间
- Java基础学习总结(153)——HashMap、Hashtable、ConcurrentHashMap的原理与区别
- asp.net listview 单元格文字颜色_Excel – 如何批量修改单元格中部分关键字的字体颜色?...
- csdn博客图片复制不过来怎么办?如何转载?
- Win10安装JDK与配置环境变量
- Linux添加虚拟网卡的多种方法
- Insyde uefi 隐藏设置_vivo手机怎么隐藏应用 vivo手机怎样把软件隐藏起来?
- 怎么用按键精灵快速开发计算距离自己最近的怪物/包裹/金矿坐标的脚本
- 浅谈专科程序员的出路
- linux 中移动文件_如何在Linux中移动文件
- WordPress 安全漏洞
- 计算机二级的公共基础课水平测试,计算机二级公共基础知识复习试题含答案
- 淘宝电商评论数据可视化分析系统-电商评论分析系统
- mybatis 的入参和出参
- c语言查询学号(字符串),c语言短学期
- 倍福ADS通讯(一)——ADS通讯简介
- What is a Digital Signature?
- ssh提示IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY解决