JVM总结(三)Minor GC、Major GC和Full GC
生活随笔
收集整理的這篇文章主要介紹了
JVM总结(三)Minor GC、Major GC和Full GC
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Java與C++之間有一堵由內存動態分配和垃圾收集技術所圍成的“高墻”,墻外面的人想進去,墻里面的人卻想出來。
一、Minor GC
Minor GC,比如當 Eden 區滿了。
GC之后,就會晉升到老年代(當然并不是所有的對象都是這樣晉升的到老年代的),當老年代滿了,就會報OutofMemory異常。
二、Major GC vs Full GC
在目前的項目中還沒有明確的定義,這點需要注意。JVM規范和垃圾收集研究論文都沒有提及,但是乍一看,這些建立在我們掌握了Minor GC清理新生代上的定義并非難事:
- Major GC清理Tenured區(老年代)。
- Full GC清理整個heap區,包括Yong區和Tenured區。
Full GC觸發條件
(1)調用System.gc時,系統建議執行Full GC,但是不必然執行
(2)老年代空間不足
(3)方法去空間不足
(4)通過Minor GC后進入老年代的平均大小 > 老年代的可用內存
(5)由Eden區、From Space區向To Space區復制時,對象大小大于To Space可用內存,則把該對象轉存到老年代,且老年代的可用內存小于該對象大小。即老年代無法存放下新年代過度到老年代的對象的時候,會觸發Full GC。
補充
以上的GC總結,只是在非并發GC的觸發條件下的大致原理。真正的GC情況跟實際GC器的回收機制有關。不同的GC器對Major GC 和 Full GC 的機制還是有區別的。如JVM中Serial GC, Parallel GC, CMS, G1 GC。會在后續的總結中去總結。
總結
以上是生活随笔為你收集整理的JVM总结(三)Minor GC、Major GC和Full GC的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深圳中学因招聘上热搜:名校博士挤破头想进
- 下一篇: oracle 追究,ORACLE事件跟踪