文章要求讀者熟悉 JVM 內置的通用垃圾回收原則。堆內存劃分爲 Eden、Survivor 和 Tenured/Old 空間,代假設和其餘不一樣的 GC 算法超出了本文討論的範圍。 html
從年 輕代空間(包括 Eden 和 Survivor 區域)回收內存被稱爲 Minor GC。這必定義既清晰又易於理解。可是,當發生Minor GC事件的時候,有一些有趣的地方須要注意到: java
因此 Minor GC 的狀況就至關清楚了——每次 Minor GC 會清理年輕代的內存 算法
你們應該注意到,目前,這些術語不管是在 JVM 規範仍是在垃圾收集研究論文中都沒有正式的定義。可是咱們一看就知道這些在咱們已經知道的基礎之上作出的定義是正確的,Minor GC 清理年輕帶內存應該被設計得簡單: 併發
很不幸,實際上它還有點複雜且使人困惑。首先,許多 Major GC 是由 Minor GC 觸發的,因此不少狀況下將這兩種 GC 分離是不太可能的。另外一方面,許多現代垃圾收集機制會清理部分永久代空間,因此使用「cleaning」一詞只是部分正確。 工具
這使得咱們不用去關心究竟是叫 Major GC 仍是 Full GC,你們應該關注當前的 GC 是否中止了全部應用程序的線程,仍是可以併發的處理而不用停掉應用程序的線程。 spa
這種混亂甚至內置到 JVM 標準工具。下面一個例子很好的解釋了個人意思。讓咱們比較兩個不一樣的工具 Concurrent Mark 和 Sweep collector (-XX:+UseConcMarkSweepGC)在 JVM 中運行時輸出的跟蹤記錄。 線程
考慮到這種狀況,最好避免以 Minor、Major、Full GC 這種方式來思考問題。而應該監控應用延遲或者吞吐量,而後將 GC 事件和結果聯繫起來。 翻譯
隨着這些 GC 事件的發生,你須要額外的關注某些信息,GC 事件是強制全部應用程序線程中止了仍是並行的處理了部分事件。 設計
原文連接: javacodegeeks 翻譯: ImportNew.com - 光光頭去打醬油 指針
譯文連接: http://www.importnew.com/15820.html