JVM系列(一):垃圾回收之MinorGC,MajorGC和FullGC的区别

 1.GC的分类  

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

  • 新生代收集(Minor GC/Young GC):只针对新生代的垃圾收集。具体点的是Eden区满时触发GC。 Survivor满不会触发Minor GC 。
  • 老年代收集(Major GC/Old GC):只针对 老年代的垃圾收集。 目前,只有CMS收集器会有单独收集老年代的行为。
  • 混合收集(Mixed GC):指目标是收集整个新生代以及部分老年代的垃圾收集。 目前只有G1收集器会有这种行为。
  • 整堆收集(Full GC):收集整个Java堆和方法区的垃圾收集。

2.1MinorGC

  当年轻代(Eden区)满时就会触发 Minor GC,这里的年轻代满指的是 Eden区满。Survivor 满不会触发 Minor GC 。对于大部分应用程序,Minor GC 操作时应用程序停顿导致的延迟都是可以忽略不计的。大部分 Eden 区中的对象都能被认为是垃圾,永远也不会被复制到 Survivor 区或者老年代空间。如果正好相反,Eden 区大部分新生对象不符合 GC 条件,Minor GC 执行时暂停的时间将会长很多。

2.2MajorGC

  当老年代满时会触发MajorGC,只有CMS收集器会有单独收集老年代的行为,其他收集器均无此行为。而针对新生代的MinorGC,各个收集器均支持。总之,单独发生收集行为的只有新生代,除了CMS收集器,都不支持单独回收老年代。

2.3FullGC

  FullGC是针对新生代,老年代和方法区(元空间)的垃圾收集。FullGC产生的条件:
     (1)调用System.gc时,系统建议执行Full GC,但是不一定会执行 。

     (2)老年代空间不足。

  (3)方法区空间不足,类卸载(类卸载三个条件)。

     (4)通过 Minor GC 后进入老年代的空间大于老年代的可用内存

  (5)内存空间担保。

 

posted @ 2020-09-19 22:44  J-mo-太阳  阅读(5389)  评论(0编辑  收藏  举报