什么时候触发 GC

什么时候触发Young GC----针对年轻代

当Eden区满了的时候,会触发Young GC

什么时候触发 Full GC----针对整个堆在发生Young GC的时候,虚拟机会检测之前每次晋升到老年代的平均大小是否大于年老代的剩余空间,如果大于,则直接进行Full GC;

如果小于,但设置了Handle PromotionFailure,那么也会执行Full GC。

-XX:HandlePromotionFailure:是否设置空间分配担保

JDK7及以后这个参数就失效了.

只要老年代的连续空间大于新生代对象的总大小或者历次晋升到老年代的对象的平均大小就进行MinorGC,否则FullGC永久代空间不足,会触发Full GC

System.gc()也会触发Full GC

堆中分配很大的对象

所谓大对象,是指需要大量连续内存空间的java对象,例如很长的数组,此种对象会直接进入老年代,而老年代虽然有很大的剩余空间,但是无法找到足够大的连续空间来分配给当前对象,此种情况就会触发JVM进行Full GC。

-XX:+UseCMSCompactAtFullCollection:设置CMS收集器在完成垃圾收集后是否要进行一次内存碎片的整理

为了解决大对象这个问题,CMS垃圾收集器提供了一个可配置的参数,即-XX:+UseCMSCompactAtFullCollection开关参数,用于在“享受”完Full GC服务之后额外免费赠送一个碎片整理的过程。

-XX:CMSFullGCsBeforeCompaction:设定进行多少次CMS垃圾回收后,进行一次内存压缩

内存整理的过程无法并发的,空间碎片问题没有了,停顿时间不得不变长了,JVM设计者们还提供了另外一个参数 -XX:CMSFullGCsBeforeCompaction,这个参数用于设置在执行多少次不压缩的 Full GC 后,跟着来一次带压缩的。CMS GC concurrent mode failure 问题

concurrent mode failure是在执行CMS GC的过程中同时业务线程将对象放入老年代,而此时老年代空间不足,这时 CMS 还没有机会回收老年带产生的,或者在做 Minor GC的时候,新生代救助空间放不下,需要放入老年代,而老年代也放不下而产生的。

CMS GC----针对年老代

配置了-XX:CMSInitiatingOccupancyFraction=75和-XX:+UseCMSInitiatingOccupancyOnly,设定CMS在对内存占用率达到75%的时候开始GC

配置了-XX:+CMSClassUnloadingEnabled,CMSInitiatingPermOccupancyFraction=80%,即:Perm Gen的使用达到一定的比率,默认为92%

配置了-XX:+ExplicitGCInvokesConcurrent,且未配置-XX:+DisableExplicitGC的情况下,显示调用了System.gc()

CMS在并发模式工作的时候是只收集老年代的。但一旦并发模式失败(发生concurrent mode failure)就有选择性的会进行全堆收集,也就是退回到Full GC。

欢迎关注公众号:程序员开发者社区

java什么时候触发gc_什么时候触发 GC相关推荐

  1. 实例浅析epoll的水平触发和边缘触发,以及边缘触发为什么要使用非阻塞IO

    一.基本概念 我们通俗一点讲: Level_triggered(水平触发):当被监控的文件描述符上有可读写事件发生时,epoll_wait()会通知处理程序去读写.如果这次没有把数据一次性全部读写完( ...

  2. Basler 相机硬触发(line1外部触发)接线与输出Out1

    本文介绍Balser相机的接线(相机电源.相机输入触发.相机输出Out1) 一.接线 根据官网6pin针角说明,2外部触发正,5为外部触发接地, 外部触发0-24VDC均可,不要超过30VDC.1和6 ...

  3. 水平触发LT、边缘触发ET

    Level_triggered(水平触发 LT):当被监控的文件描述符上有可读写事件发生时,epoll_wait()会通知处理程序去读写.如果这次没有把数据一次性全部读写完(如读写缓冲区太小),那么下 ...

  4. Swiper.js使用遇到的问题总结onSlideChangeEnd回调偶尔触发,偶尔不触发等

    Vue全套学习学习视频:B站 小胖梅-的个人空间_哔哩哔哩_Bilibili swiper 是一个开源免费的移动触摸插件.swiper3.0版本使用. onSlideChangeEnd回调偶尔不触发, ...

  5. java的文本框如何回车键触发按钮_java回车触发按钮的代码

    使用的时候,只要将SwingUtils .enterPressesWhenFocused(JButton)这样就可以实现回车时候,触发按钮. 另外文本输入框回车触发事件则是:SwingUtils .e ...

  6. java textfield事件_java – 以编程方式触发JTextField中的键事件...

    >不要在JTextField上使用KeyListener只需添加ActionListener,当按下ENTER时会触发(感谢@robin 1获取建议) JTextField textField ...

  7. java回车触发按钮_java回车触发按钮的代码

    可以实现回车触发按钮,或者是在文本输入框的时候,回车触发一个事件. 使用的时候,只要将SwingUtils .enterPressesWhenFocused(JButton)这样就可以实现回车时候,触 ...

  8. jq 和java 多张图片_jQuery多个事件触发相同的功能

    有没有办法让keyup , keypress , blur和change事件在一行中调用相同的函数,还是必须单独执行? 我遇到的问题是我需要使用数据库查找验证一些数据,并且希望确保在任何情况下都不会错 ...

  9. java中gc触发的条件_触发Full gc条件

    1.调用System.gc import java.util.ArrayList; import java.util.List; /** * * created by: gaoxingliang@ou ...

最新文章

  1. [代码]ural 1655 Somali Pirates
  2. ComeFuture英伽学院——2020年 全国大学生英语竞赛【C类初赛真题解析】(持续更新)
  3. jQuery中$(document).ready()和window.onload的区别?
  4. 《重构-改善既有代码的设计》学习笔记(一)
  5. 深入了解EntityFramework——Fluent API
  6. RedHat Enterprise Linux Server 5 在VMware Workstation 6.5的详细安装过程(2)
  7. Jquery学习总结(7)——JQuery常用的10个方法总结
  8. shell输出标准化xml
  9. android textview显示表情,在Android TextView中显示表情符号/情感图标
  10. Creating Apps With Material Design —— Defining Shadows and Clipping Views
  11. “AI+遥感”产品研究现状
  12. Ubuntu18.04 安装 Matlab2020a
  13. shiro框架java使用
  14. 更新个祥硕ASM1153E开卡转接板的固件,详细教程
  15. [Pandas] 数据形状df.shape
  16. SSL证书中DV、OV、EV证书的区别有哪些
  17. unity 和安卓互相交互
  18. C/C++黑魔法-防御性编程
  19. MySQL的几种join方法
  20. 如何轻松通过 ArcBlock 的招聘流程 | ArcBlock 博客

热门文章

  1. 【JMeter】压测工具的使用
  2. 苹果机型中最具经典的三款机型
  3. Ubuntu14.04网易云音乐的下载及安装 ssh安装 卸载 安装输入法
  4. 百度地图的POI帮助文件
  5. 如何用几何画板画绕点旋转动画
  6. Stochastic Depth ResNet
  7. 2020年中国数字减影血管造影系统(DSA)市场现状分析,DSA设备需求不断提升「图」
  8. 【Ubuntu】 解决中文输入问题 --- 安装搜狗拼音输入法
  9. 爬虫 (十九) 有趣的例子认识 while 循环 (十)
  10. 闲谈IPv6-IPv6地址聚类分配原则于源地址选择的关系