Minor GCMajor GCFull GC

Posted strandtrack

tags:

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

Minor GC :只是新生代的垃圾收集

  1. new的对象先放Eden区。此区有大小限制,Eden区就是伊甸园区,因为圣经中说了,亚当先被上帝创造出来之后,怕他孤单,把亚当的肋骨抽出来一根创造出来了夏娃,亚当和夏娃被丢进了伊甸园,所以这里的Eden就是说new的对象最先放的地方。
  2. 当伊甸园的空间填满时,程序又需要创建对象,JVM的垃圾回收器将对伊甸园区进行垃圾回收(Minor GC),将伊甸园区中的不再被其他对象所引用的对象进行销毁。再加载新的对象放到伊甸园区
  3. 然后将伊甸园中的剩余对象移动到幸存者0区。
  4. 如果再次触发垃圾回收,此时上次幸存下来的放到幸存者0区的,如果没有回收,就会放到幸存者1区。
  5. 如果再次经历垃圾回收,此时会重新放回幸存者0区,接着再去幸存者1区。
  6. 啥时候能去养老区呢?可以设置次数。默认是15次。·可以设置参数:-XX:MaxTenuringThreshold=进行设置。
  7. 在养老区,相对悠闲。当老年区内存不足时,再次触发GC:Major GC,进行养老区的内存清理。
  8. 若养老区执行了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都是什么?

面试官:Minor GCMajor GCFull GC 区别?我竟然答不上来。。

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

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

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