【Java随手小记】GC的种类?Minor GC、Major GC、Full GC怎么区分?

在初学垃圾回收时,因为概念很多,对于GC这块都会有点混乱,尤其学习时搜集过各种资料的,我就是其中之一。今天学习了这块内容,对这块进行整理总结一下。

本文所说的均是对于HorSpot VM的实现。

GC的种类

分析

按照GC进行的区域,主要可以分为两大块:Partial GC和Full GC

  • Partial GC:并不对整个堆进行收集的GC
  • Full GC:对整个堆进行收集的GC

一般来说,Partial GC主要就是Young GC,即对新生代Young Gen进行垃圾回收。但是后面发展了很多的垃圾回收器,也出现了很多特别的Partial GC,比如CMS收集器的concurrent Collection模式就是只收集老年代的Old GC,G1收集器中有个模式,可以收集整个新生代Young Gen和部分老年代Old Gen。所以Partial GC又可以分为:

  • Partial GC
    • Young GC:只收集新生代
    • Old GC:只收集老年代(CMS的concurrent Collection模式)
    • Mixed GC:收集整个新生代和部分老年代(G1的一种模式)

学习过垃圾回收机制的应该听过两个说法:Minor GC和Major GC

  • Minor GC:其实就是Young GC
  • Major GC:一般都是指Full GC,但是随着技术发展,对这个词已经有点混乱了,有时也把这个指Old GC。(所以当听到这个词时要问清楚他具体说的是哪个?)

总结

部分收集 (Partial GC):

  • 新生代收集(Minor GC / Young GC):只对新生代进行垃圾收集;
  • 老年代收集(Old GC / Major GC):只对老年代进行垃圾收集。需要注意的是 Major GC 在有的语境中也用于指代整堆收集;
  • 混合收集(Mixed GC):对整个新生代和部分老年代进行垃圾收集。

整堆收集 (Full GC / Major GC):收集整个 Java 堆和方法区。

Full GC的一些说明

问题

从上面的分类中可以知道,Full GC是整堆收集,也就是说包括了新生代Young Gen,但有些资料里面说当老年代空间不足时,先进行一个Minor GC,再Full GC。既然Full GC已经包括了新生代,为什么还有这种机制呢?

说明

其实一般情况下Full GC前是不用进行Minor GC的。但凡是总有例外。

比如Parallel Scavenge垃圾收集器下,在Full GC前就会进行一次Minor GC。其目的是减少Full GC的执行时间,减少单次的Full GC的STW(stop the world),并且在Minor GC和Full GC之间允许运行一下应用程序。
我们知道,Minor GC和Full GC都会有STW。将一次Full GC拆成两次,可以减少单次的STW,以尽量提升应用程序的响应速度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值