JVM——Minor GCMajor GC和Full GC之间的区别

Posted 青城博雅教育科技

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JVM——Minor GCMajor GC和Full GC之间的区别相关的知识,希望对你有一定的参考价值。

1.Minor GC


我们知道,新生代可以分为Eden和Survivor区域,而从新生代代空间(包括 Eden 和 Survivor 区域)回收内存则被称为 Minor GC。可以参考JVM——四种垃圾收集算法详解中的标记复制算法。


2.Major GC vs Full GC


Major GC 是清理老年代。但是由于很多MojorGC 是由MinorGC 触发的,所以有时候很难将MajorGC 和MinorGC区分开。出现了 Major GC,经常会伴随至少一次的 Minor GC(但非绝对的,ParallelScavenge 收集器的收集策略里就有直接进行 Major GC 的策略选择过程) 。MajorGC 的速度一般会比 Minor GC 慢 10倍以上。

Full GC 是清理整个堆空间—包括年轻代和老年代。

3.触发机制


Minor GC触发机制: 当年轻代满时就会触发Minor GC,这里的年轻代满指的是Eden代满,Survivor满不会引发GC。 

Full GC触发机制: 


调用System.gc时,系统建议执行Full GC(但是不必然执行 )

老年代空间不足 

方法区空间不足 

通过Minor GC后进入老年代的平均大小大于老年代的可用内存 

由Eden区、survivor space1(From Space)区向survivor space2(To Space)区复制时,对象大小大于To Space可用内存,则把该对象转存到老年代,且老年代的可用内存小于该对象大小

当永久代满时也会引发Full GC,会导致Class、Method元信息的卸载。 

 

其实Full GC定义是相对明确的,就是针对整个新生代、老生代、元空间(metaspace,java8以上版本取代perm gen)的全局范围的GC;Minor GC和Major GC是俗称,在Hotspot JVM实现的Serial GC, Parallel GC, CMS, G1 GC中大致可以对应到某个Young GC和Old GC算法组合;

因此,简单的说,GC的触发条件就是某GC算法对应区域满了,或是预测快满了。比如,上文说到的,各种Young GC的触发原因都是eden区满了。


 


好啦,以上就是关于几种GC的相关知识总结啦!

以上是关于JVM——Minor GCMajor GC和Full GC之间的区别的主要内容,如果未能解决你的问题,请参考以下文章

直通BAT JVM必考题:Minor GCMajor GCFull GC的区别

直通BAT JVM必考题:Minor GCMajor GCFull GC的区别

Minor GC(Young GC)Full GCMajor GCOld GC

Java GC工作原理以及Minor GCMajor GCFull GC简单总结

gc之四--Minor GCMajor GC和Full GC之间的区别

Minor GCYoung GCOld GCMajor GCMixed GCFull GC都是什么?