GC中的MinorGC MajorGC FullGC

本文主要介绍了Minor GC、Major GC和Full GC的区别。Minor GC是年轻代GC,通常认为Major GC和Full GC是针对老年代/永久代的GC。Full GC本身不会先进行Minor GC,但可配置使其先进行一次以提高老年代GC速度,还介绍了Full GC在不同定义下的含义。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Minor GC Major GC Full GC 的区别

Minor GC 故名思意 是年轻代GC 。
我们可以认为Major GC == Full GC,他们是一个概念,就是针对老年代/永久代进行GC。
因为取名叫Full就会让人疑惑,到底会不会先Minor GC。
事实上Full GC本身不会先进行Minor GC,我们可以配置,让Full GC之前先进行一次Minor GC,因为老年代很多对象都会引用到新生代的对象,先进行一次Minor GC可以提高老年代GC的速度。
比如老年代使用CMS(并发标记清除法)时,设置CMSScavengeBeforeRemark优化,让CMS remark之前先进行一次Minor GC。
弄清楚了Full GC本意单纯就是针对老年代了之后,我们再进一步深入理解Full GC的含义。因为CMS主要可以分为
initial mark(stop the world),
concurrent mark,
remark(stop the world),
concurrent sweep
几个阶段,其中initial mark和remark会stop the world。
这里的定义是另外一种解释:

  1. Full GC == Major GC指的是对老年代/永久代的stop the world的GC
  2. Full GC的次数 = 老年代GC时 stop the world的次数
  3. Full GC的时间 = 老年代GC时 stop the world的总时间
  4. CMS 不等于Full GC,我们可以看到CMS分为多个阶段,只有stop the world的阶段被计算到了Full GC的次数和时间,而和业务线程并发的GC的次数和时间则不被认为是Full GC。
  5. Full GC本身不会先进行Minor GC,我们可以配置,让Full GC之前先进行一次Minor GC,因为老年代很多对象都会引用到新生代的对象,先进行一次Minor GC可以提高老年代GC的速度。比如老年代使用CMS时,设置CMSScavengeBeforeRemark优化,让CMS remark之前先进行一次Minor GC。

总的来讲:
一种是简单的想法就把MajorGC与FullGC划等号。
一种FullGC指的是MajorGC中stop the world 时的那个的GC。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值