GC的分类
JVM在进行GC时,可能针对三个区域进行垃圾回收分别是新生代、老年代、方法区,大部分时候回收的都是新生代。GC类型主要有以下四种类型。

新生代收集(Minor GC/Young GC):
只针对新生代的垃圾收集。具体点的是 Eden区满时触发GC。Survivor满不会触发Minor GC。
老年代收集(Major GC/Old GC):
只针对老年代的垃圾收集。目前,只有CMS收集器会有单独收集老年代的行为。
混合收集(Mixed GC):
指目标是收集整个新生代以及部分老年代的垃圾收集。目前只有G1收集器会有这种行为。
整堆收集(Full GC):
收集整个Java堆和方法区的垃圾收集。
1、Minor GC
当新生代(Eden 区)满时就会触发Minor GC,这里的新生代满指的是Eden区满。Survivor 满不会触发 Minor GC。对于大部分应用程序,Minor GC操作时应用程序停顿导致的延迟都是可以忽略不计的。大部分 Eden 区中的对象都能被认为是垃圾,永远也不会被复制到 Survivor区或者老年代空间。如果正好相反,Eden 区大部分新生对象不符合GC条件,Minor GC执行时暂停的时间将会长很多。
2、Major GC
当老年代满时会触发MajorGC,只有CMS收集器会有单独收集老年代的行为,其他收集器均无此行为。而针对新生代的MinorGC,各个收集器均支持。总之,单独发生收集行为的只有新生代,除了CMS收集器,都不支持单独回收老年代。
3、Full GC
Full GC是针对新生代,老年代和方法区(元空间)的垃圾收集。Full GC产生的条件:
1、调用System.gc() 时,系统建议执行Full GC,但是不一定会执行。
2、老年代空间不足。
3、方法区空间不足,类卸载(类卸载三个条件)。
4、通过 Minor GC后进入老年代的空间大于老年代的可用内存
5、内存空间担保。

Was this helpful?

0 / 0

发表回复 0

Your email address will not be published.