Minor GCMajor GCFull GC
Posted strandtrack
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Minor GCMajor GCFull GC相关的知识,希望对你有一定的参考价值。
Minor GC :只是新生代的垃圾收集
- new的对象先放Eden区。此区有大小限制,Eden区就是伊甸园区,因为圣经中说了,亚当先被上帝创造出来之后,怕他孤单,把亚当的肋骨抽出来一根创造出来了夏娃,亚当和夏娃被丢进了伊甸园,所以这里的Eden就是说new的对象最先放的地方。
- 当伊甸园的空间填满时,程序又需要创建对象,JVM的垃圾回收器将对伊甸园区进行垃圾回收(Minor GC),将伊甸园区中的不再被其他对象所引用的对象进行销毁。再加载新的对象放到伊甸园区
- 然后将伊甸园中的剩余对象移动到幸存者0区。
- 如果再次触发垃圾回收,此时上次幸存下来的放到幸存者0区的,如果没有回收,就会放到幸存者1区。
- 如果再次经历垃圾回收,此时会重新放回幸存者0区,接着再去幸存者1区。
- 啥时候能去养老区呢?可以设置次数。默认是15次。·可以设置参数:-XX:MaxTenuringThreshold=进行设置。
- 在养老区,相对悠闲。当老年区内存不足时,再次触发GC:Major GC,进行养老区的内存清理。
- 若养老区执行了Major GC之后发现依然无法进行对象的保存,就会产生OOM异常。
总结
==针对幸存者s0,s1区:复制之后有交换,谁空谁是to==
==关于垃圾回收:频繁在新生区收集,很少在养老区收集,几乎不再永久区/元空间收集。==
Major GC:只是老年代的垃圾收集
- 指发生在老年代的GC,对象从老年代消失时,Major GC 或者 Full GC 发生了
- 出现了Major GC,经常会伴随至少一次的Minor GC(不是绝对的,在Parallel Scavenge 收集器的收集策略里就有直接进行Major GC的策略选择过程)
- 也就是老年代空间不足时,会先尝试触发Minor GC。如果之后空间还不足,则触发Major GC
- Major GC速度一般会比Minor GC慢10倍以上,STW时间更长
- 如果Major GC后,内存还不足,就报OOM了
Full GC:收集整个java堆和方法区的垃圾收集
-
- ①调用System.gc()时,系统建议执行Full GC,但是不必然执行
- ②老年代空间不足
- ③方法区空间不足
- ④通过Minor GC后进入老年代的平均大小小于老年代的可用内存
- ⑤由Eden区,Survivor S0(from)区向S1(to)区复制时,对象大小由于To Space可用内存,则把该对象转存到老年代,且老年代的可用内存小于该对象大小
- 说明:Full GC 是开发或调优中尽量要避免的,这样暂停时间会短一些
以上是关于Minor GCMajor GCFull GC的主要内容,如果未能解决你的问题,请参考以下文章
面试官:Minor GCMajor GCFull GC 区别?我竟然答不上来。。
Minor GCYoung GCOld GCMajor GCMixed GCFull GC都是什么?
Java GC工作原理以及Minor GCMajor GCFull GC简单总结
直通BAT JVM必考题:Minor GCMajor GCFull GC的区别