JVM系列(一):垃圾回收之MinorGC,MajorGC和FullGC的區別


 1.GC的分類  

  JVM在進行GC時,可能針對三個區域進行垃圾回收分別是新生代、老年代、方法區,大部分時候回收的都是新生代。GC類型主要有以下四種類型。

  • 新生代收集(Minor GC/Young GC):只針對新生代的垃圾收集。具體點的是Eden區滿時觸發GC。 Survivor滿不會觸發Minor GC 。
  • 老年代收集(Major GC/Old GC):只針對 老年代的垃圾收集。 目前,只有CMS收集器會有單獨收集老年代的行為。
  • 混合收集(Mixed GC):指目標是收集整個新生代以及部分老年代的垃圾收集。 目前只有G1收集器會有這種行為。
  • 整堆收集(Full GC):收集整個Java堆和方法區的垃圾收集。

2.1MinorGC

  當年輕代(Eden區)滿時就會觸發 Minor GC,這里的年輕代滿指的是 Eden區滿。Survivor 滿不會觸發 Minor GC 。對於大部分應用程序,Minor GC 操作時應用程序停頓導致的延遲都是可以忽略不計的。大部分 Eden 區中的對象都能被認為是垃圾,永遠也不會被復制到 Survivor 區或者老年代空間。如果正好相反,Eden 區大部分新生對象不符合 GC 條件,Minor GC 執行時暫停的時間將會長很多。

2.2MajorGC

  當老年代滿時會觸發MajorGC,只有CMS收集器會有單獨收集老年代的行為,其他收集器均無此行為。而針對新生代的MinorGC,各個收集器均支持。總之,單獨發生收集行為的只有新生代,除了CMS收集器,都不支持單獨回收老年代。

2.3FullGC

  FullGC是針對新生代,老年代和方法區(元空間)的垃圾收集。FullGC產生的條件:
     (1)調用System.gc時,系統建議執行Full GC,但是不一定會執行 。

     (2)老年代空間不足。

  (3)方法區空間不足,類卸載(類卸載三個條件)。

     (4)通過 Minor GC 后進入老年代的空間大於老年代的可用內存

  (5)內存空間擔保。

 


免責聲明!

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



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