Minor GC ,major GC,Full GC 觸發條件


 

老年代(Old generation)

對象沒有變得不可達,並且從新生代中存活下來,會被拷貝到這里。其所占用的空間要比新生代多。也正由於其相對較大的空間,發生在老年代上的GC要比新生代少得多。對象從老年代中消失的過程,我們稱之為**”major GC“ **

minorGC 是清理整合YouGen的過程, eden 的清理,S0\S1的清理都由於MinorGC
Allocation Failure(YoungGen區內存不足,不夠調用) 會觸發minorGC

Minor GC觸發條件:當Eden區滿時,觸發Minor GC。只是會針對新生代的

 

Major GC 是清理OldGen。

很不幸,實際上它還有點復雜且令人困惑。首先,許多 Major GC 是由 Minor GC 觸發的,所以很多情況下將這兩種 GC 分離是不太可能的。另一方面,許多現代垃圾收集機制會清理部分永久代空間,所以使用“cleaning”一詞只是部分正確。

這使得我們不用去關心到底是叫 Major GC 還是 Full GC,大家應該關注當前的 GC 是否停止了所有應用程序的線程,還是能夠並發的處理而不用停掉應用程序的線程。

Full GC觸發條件:

Full GC定義是相對明確的,就是針對整個新生代、老生代、元空間(metaspace,java8以上版本取代perm gen)的全局范圍的GC;

  1. 調用System.gc()時,系統建議執行Full GC,但是不必然執行
  2. 老年代空間不足
  3. 方法區空間不足
  4. 通過Minor GC后進入老年代的平均大小大於老年代的可用內存
  5. 由Eden區、From Space區向To Space區復制時,對象大小大於To Space可用內存,則把該對象轉存到老年代,且老年代的可用內存小於該對象大小

 System.gc()這個東西提醒的是Full GC,不是Minor GC。


免責聲明!

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



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