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简单总结