JVM full GC和Major GC的区别

Major GC 调用情况

用于回收老年代
执行major GC之前一定会执行一次Minor GC
当老年代空间不足的时候就会执行Major GC
Major GC比Minor GC慢上10倍
如果Major GC以后老年代空间还是不够用,就报OOM

Full GC 调用情况:

调用System.gc()的时候会执行
大对象转入
方法区空间不足
老年代的连续空间小于eden区中的对象的大小,如果还是小于,那么就查看是否开启了空间担保机制,如果没有开启,就直接进行full gc,如果开启了,就查看老年代最大连续可用空间是否大于历代晋升老年代对象的大小,如果大于,就执行Minor GC,但是这次Minor GC不一定是安全的,因为存在的要进入老年代的对象可能大于老年代中的连续空间(回收以后还是不够),如果小于,那么就直接进行full GC
如果Full GC以后老年代空间还是不够用,就报OOM了。

Major GC只是用于回收老年代(目前只有CMS会进行单独老年代的回收,所以是不是Major比较少用了?我也不知道,找不到详细说明的。),而Full GC用于回收全局。

经验分享 程序员 微信小程序 职场和发展