Minor GC、Major GC、Full GC 區別


原創轉載請注明出處:https://www.cnblogs.com/agilestyle/p/11488036.html

 

Minor GC 清理年輕代

Minor GC指新生代GC,即發生在新生代(包括Eden區和Survivor區)的垃圾回收操作,當新生代無法為新生對象分配內存空間的時候,會觸發Minor GC。因為新生代中大多數對象的生命周期都很短,所以發生Minor GC的頻率很高,雖然它會觸發stop-the-world,但是它的回收速度很快。

 

Major GC 清理老年代

Major GC清理Tenured區,用於回收老年代,出現Major GC通常會出現至少一次Minor GC。

 

Full GC 清理整個堆空間—包括年輕代、老年代、元空間

Full GC是針對整個新生代、老生代、元空間(metaspace,java8以上版本取代perm gen)的全局范圍的GC。Full GC不等於Major GC,也不等於Minor GC+Major GC,發生Full GC需要看使用了什么垃圾收集器組合,才能解釋是什么樣的垃圾回收。

 

Note

不管什么GC,都會發生stop-the-world,區別是發⽣的時間長短。⽽這個時間跟垃圾收集器又有關系,Serial、PartNew、Parallel Scavenge收集器⽆論是串⾏還是並⾏,都會掛起⽤戶線程,⽽CMS和G1在並發標記時,是不會掛起⽤戶線程的,但其它時候⼀樣會掛起⽤戶線程,STW 的時間相對來說就小很多了。

Major GC 在很多參考資料中是等價於 Full GC的,我們也可以發現很多性能監測工具中只有Minor GC 和 Full GC。

⼀般情況下,⼀次Full GC將會對年輕代、⽼年代、元空間以及堆外內存進⾏垃圾回收。

觸發Full GC的原因有很多:

  • 當年輕代晉升到⽼年代的對象⼤⼩,並⽐⽬前⽼年代剩余的空間⼤⼩還要⼤時,會觸發Full GC;
  • 當⽼年代的空間使⽤率超過某閾值時,會觸發Full GC;
  • 當元空間不⾜時(JDK1.7永久代不足),也會觸發Full GC;
  • 當調⽤System.gc()也會安排⼀次Full GC。

 

Reference

https://plumbr.io/blog/garbage-collection/minor-gc-vs-major-gc-vs-full-gc

https://time.geekbang.org/column/article/109201

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM