32.MinorGC、MajorGC和FullGC的对比
1.MinorGC、MajorGC和FullGC的对比
1.JVM
在进行GC
的时候,并不是每次都是对新生代、老年代、永久代/元空间一起回收的,大部分的回收都是值新生代。
2.针对HotSpot VM的实现,它里面的GC按照回收区域可以分为两种类型:一种是部分收集(Partial GC)
,一种是整堆收集(Full FC)
- 部分收集:不是完整收集整个堆。其中又分为:
a) 新生代收集(Minor GC / Young GC)
:只有新生代的垃圾收集。
b) 老年代收集(Major GC / Old GC)
:只有老年代的收集。
目前,只有CMS GC
才会有单独收集老年代的行为。
很多时候Major GC
和Full GC
会混淆使用,需要具体分辨是老年代回收还是整堆回收。
c) 混合收集:收集整个新生代以及部分老年代的垃圾。
目前只有G1 GC
有这种行为。 - 整堆收集
(Full GC)
:收集整个java堆和方法区的垃圾
2.GC触发机制
1.年轻代GC(Minor GC)
触发机制。
- 当年轻代空间不足的时候,就会触发
Minor GC
。这里的年轻代指的是Eden
区,只有Eden
区满的时候才会触发Minor GC
,S0
区或者S1
区满是不会触发GC
的。 Minor GC
发生的很频繁,回收速度也很快。Minor GC
会引发STW(Stop the World)
,暂停其他用户线程,等待垃圾回收结束,用户线程才会恢复运行。
2.老年代GC(Major GC)
触发机制。
3.Full GC
触发机制。