作者:RednaxelaFX
链接:http://www.zhihu.com/question/41922036/answer/93079526
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

针对HotSpot VM的实现,它里面的GC其实准确分类只有两大种:

  • Partial GC:并不收集整个GC堆的模式

    • Young GC:只收集young gen的GC
    • Old GC:只收集old gen的GC。只有CMS的concurrent collection是这个模式
    • Mixed GC:收集整个young gen以及部分old gen的GC。只有G1有这个模式
  • Full GC:收集整个堆,包括young gen、old gen、perm gen(如果存在的话)等所有部分的模式。

Major GC通常是跟full GC是等价的,收集整个GC堆。但因为HotSpot VM发展了这么多年,外界对各种名词的解读已经完全混乱了,当有人说“major GC”的时候一定要问清楚他想要指的是上面的full GC还是old gen。

最简单的分代式GC策略,按HotSpot VM的serial GC的实现来看,触发条件是:

  • young GC:当young gen中的eden区分配满的时候触发。注意young GC中有部分存活对象会晋升到old gen,所以young GC后old gen的占用量通常会有所升高。
  • full GC:当准备要触发一次young GC时,如果发现统计数据说之前young GC的平均晋升大小比目前old gen剩余的空间大,则不会触发young GC而是转为触发full GC(因为HotSpot VM的GC里,除了CMS的concurrent collection之外,其它能收集old gen的GC都会同时收集整个GC堆,包括young gen,所以不需要事先触发一次单独的young GC);或者,如果有perm gen的话,要在perm gen分配空间但已经没有足够空间时,也要触发一次full GC;或者System.gc()、heap dump带GC,默认也是触发full GC。

HotSpot VM里其它非并发GC的触发条件复杂一些,不过大致的原理与上面说的其实一样。
当然也总有例外。Parallel Scavenge(-XX:+UseParallelGC)框架下,默认是在要触发full GC前先执行一次young GC,并且两次GC之间能让应用程序稍微运行一小下,以期降低full GC的暂停时间(因为young GC会尽量清理了young gen的死对象,减少了full GC的工作量)。这是HotSpot VM里的奇葩嗯。

并发GC的触发条件就不太一样。以CMS GC为例,它主要是定时去检查old gen的使用量,当使用量超过了触发比例就会启动一次CMS GC,对old gen做并发收集。

Major GC和Full GC的区别是什么?触发条件呢?相关推荐

  1. minor gc和Major GC,Full GC的触发条件

    Minor GC Minor GC指新生代GC,即发生在新生代(包括Eden区和Survivor区)的垃圾回收操作,当新生代无法为新生对象分配内存空间的时候,会触发Minor GC.因为新生代中大多数 ...

  2. Minor GC、Major GC和Full GC之间的区别(转)

    在 Plumbr 从事 GC 暂停检测相关功能的工作时,我被迫用自己的方式,通过大量文章.书籍和演讲来介绍我所做的工作.在整个过程中,经常对 Minor.Major.和 Full GC 事件的使用感到 ...

  3. Minor GC、Major GC、Full GC

    一.年轻代 年轻代是所有新对象产生的地方.当年轻代内存空间被用完时,就会触发垃圾回收.这个垃圾回收叫做Minor GC.年轻代被分为3个部分--Enden区和两个Survivor区. 年轻代空间的要点 ...

  4. JVM学习笔记之-堆,年轻代与老年代,对象分配过程,Minor GC、Major GC、Full GC,堆内存大小与OOM,堆空间分代,内存分配策略,对象分配内存,小结堆空间,逃逸分析,常用调优工具

    堆的核心概述 概述 一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域.Java堆区在JVM 启动的时候即被创建,其空间大小也就确定了.是JVM管理的最大一块内存空间. 堆内存的大小是可 ...

  5. Minor GC,Major GC,Full GC -- hotspot VM GC讲解

    针对HotSpot VM的实现,它里面的GC其实准确分类只有两大种: Partial GC:并不收集整个GC堆的模式 Young GC:只收集young gen的GC Old GC:只收集old ge ...

  6. 直通BAT JVM必考题:Minor GC、Major GC、Full GC的区别

    Java面试过程,JVM属于必考题系列: 直通BAT必考题系列:深入详解JVM内存模型与JVM参数详细配置 直通BAT必考题系列:JVM的4种垃圾回收算法.垃圾回收机制与总结 直通BAT必考题系列:7 ...

  7. Minor GC、Young GC、Old GC、Major GC、Mixed GC、Full GC都是什么?

    文章目录 各个GC的概念 1.Minor GC和Young GC 2.Old GC和Major GC 3.Mixed GC 4.Full GC 两个大类partial GC和Full GC: 各个GC ...

  8. JVM的三种常见GC:Minor GC、Major GC与Full GC

    文章目录 JVM的GC JVM GC的种类 GC的触发机制 年轻代GC(Minor GC)触发机制 老年代GC(Major GC/Full GC)触发机制 Full GC触发机制 为什么需要把Java ...

  9. Minor GC、Major GC与Full GC讲解

    Minor GC 介绍 年轻代的垃圾回收,该GC会清理伊甸园区和幸存区. 因为Java对象大多都具备朝生夕灭的特性,所以Minor GC非常频繁,一般回收速度也比较快. Minor GC会引发STW: ...

最新文章

  1. 【AI】吴恩达斯坦福机器学习中文笔记汇总
  2. 使用TortoiseGit,设置ssh方式连接git仓库。
  3. python 框架好学吗-python的flask框架难学吗
  4. 机器学习入门到进阶学习路线图
  5. 【Python数据挖掘课程】三.Kmeans聚类代码实现、作业及优化
  6. xshell vim 不能粘贴_编辑器之神——vim的入门指南
  7. 深圳当代艺术家的一次聚会
  8. python+robotframework_python+robot framework接口自动化测试
  9. C言语教程第四章: 数组(4)
  10. 自由空间光通信OptiSystem仿真
  11. 推荐一个完全免费的高质量素材网站
  12. JavaWeb开发框架——Spring
  13. 二维码定位算法流程图
  14. 【按键精灵】N秒内找图函数封装
  15. 卸载ie里的java_怎么样卸载IE10/IE11 两种方法教你快速卸载IE10/IE11
  16. 方正飞鸿智能信息平台(Fix ES2007)
  17. ISO8583报文(一)
  18. 计算机的两种启动引导方式,硬盘的两种分区和对应启动引导方式
  19. git错误: The requested URL returned error: 403 Forbidden while accessing https://github.com/wangz/futu
  20. 小程序扫码在线点餐系统源码开源分享

热门文章

  1. PDF 翻译神器,再也不担心读不懂英文 Paper 了
  2. Kitty猫 vs. 百度狗,区块链动物大战,谁将下一个入局?
  3. openGL之API学习(二一一)glColor遇上纹理
  4. 计算机进程关闭后又重启,Windows 10电脑关机后又自动重启如何解决
  5. 对开环系统与闭环系统的初步理解
  6. 从云监工到云登顶,5G云直播见证中国速度
  7. Arduino “学生寝室”门禁管理(红外遥控+舵机+无源蜂鸣器+DHT11温湿度传感器+LCD1602+LED灯)
  8. SpringBoot+Vue前后端分离java高校教材征订订购系统
  9. 名帖144 行书《兰亭八柱帖》第二册:褚遂良摹兰亭序
  10. 从BBS上转的 关于职业生涯