什么时候触发GC

简介: 什么时候触发GC

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


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


什么时候触发 Full GC----针对整个堆


  1. 在发生Young GC的时候,虚拟机会检测之前每次晋升到老年代的平均大小是否大于年老代的剩余空间,如果大于,则直接进行Full GC;
  2. 如果小于,但设置了Handle PromotionFailure,那么也会执行Full GC。


-XX:HandlePromotionFailure:是否设置空间分配担保
JDK7及以后这个参数就失效了.
只要老年代的连续空间大于新生代对象的总大小或者历次晋升到老年代的对象的平均大小就进行MinorGC,否则FullGC
  1. 永久代空间不足,会触发Full GC
  2. System.gc()也会触发Full GC
  3. 堆中分配很大的对象


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


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

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


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

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


  1. 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。

相关文章
|
人工智能 前端开发 JavaScript
用 通义灵码打造创意 Loading 动画生成器:只需三个词,就能玩出花来!
本文介绍了如何利用“通义灵码”打造一个创意 Loading 动画生成器。作者通过输入“科技感、电波、液体”三个关键词,借助 AI 工具自动生成酷炫的 CSS 动画效果,无需手动编写复杂代码。整个过程高效便捷,只需描述风格关键词,即可生成多种加载动画,并可封装为组件直接使用,极大地提升了开发效率与创意表达。
|
Go 调度
使用ants并发任务,事半功倍
使用ants并发任务,事半功倍
682 0
|
大数据 数据处理 数据中心
x86和x64架构的区别及应用
x86和x64架构的区别及应用
|
算法 测试技术 C++
C++二分查找、离线算法:最近的房间
C++二分查找、离线算法:最近的房间
|
小程序 容器
【微信小程序】全局样式文件app.wxss、页面的根元素page、 app.json中的window配置项
哈喽大家好,本期是微信小程序专栏第七期,本期主要是通过设置页面背景颜色、设置导航栏颜色来学习全局样式文件app.wxss、页面的根元素page、 app.json中的window配置项。
|
存储 缓存 算法
iOS 底层原理 自测(一)
iOS 底层原理 自测(一)
711 0
iOS 底层原理 自测(一)
|
前端开发 Java 程序员
你竟然没用 Maven 构建项目?(上)
一年前,当我和小伙伴小龙一起做一个外包项目的时候,受到了严重的鄙视。我那时候还不知道 Maven,所以搭建项目用的还是最原始的方式,小龙不得已在导入项目的时候花了很长时间去下载项目依赖的开源类库。 出于对我的尊重,小龙没有破口大骂,而是非常委婉地说了一句:“二哥,你好歹也有一定的知名度了,竟然没用 Maven 构建项目,真让我大开眼界啊。” 作为一名富有上进心的程序员,不能忍啊。借此机会,有必要隆重地向大家介绍一下 Maven 了。
你竟然没用 Maven 构建项目?(上)
Nuxt.js引用static或者assets目录下资源
Nuxt.js引用static或者assets目录下资源
739 0
|
Java 开发工具 Shell
sbt安装与配置
下载地址:http://www.scala-sbt.org/download.html 当前版本:sbt-0.13.13.tgz 安装 1.解压并赋予权限 [root@hidden util]# tar -zxvf sbt-0.
9134 0
|
Web App开发 Python
01 matplotlib - 折线图、绘图属性、Web安全色、子图、保存画板
=== 折线图 - 头文件 === 解决: 1、中文显示问题 2、图像行内外显示 3、处理闪退问题 import matplotlib.pyplot as plt import numpy as np import pandas as pd # 解决中文显示问题 import matplotlib as mpl mpl.
2188 0