JVM KnowLedge Collection

標記清除是JVM用於垃圾回收的基本算法算法

標記清除算法中,引用會從每一個線程棧的楨指向程序的堆spa

從棧開始,循着指針找到全部可能的引用,而後再循着這些引用遞歸下去。線程

當遞歸完成,就找到了全部活對象,其它都是垃圾。指針

運行時環境自己也有一個「分配清單(allocation list)」,上面列出了指向每一個對象的指針對象

該列表由垃圾回收器負責維護,並幫助垃圾回收器進行垃圾清理。排序

所以,運行時環境老是能夠找出由它建立但還沒有回收的對象。遞歸


G1 垃圾回收器針對大內存多核 CPU 的環境,目的在於減小 Full GC 帶來的暫停次數,增長吞吐量。內存

從長遠來看,G1 會代替 Concurrent Mark-Sweep Collector(CMS)。get

G1 在堆上分配一系列相同大小的連續區域,而後在回收時先掃描全部的區域,按照每塊區域內存活對象的大小進行排序,優先處理存活對象小的區域,即垃圾對象最多的區域,這也是 Garbage First 這個名稱的由來。io

G1 把要收集的區域內的存活對象合併而且複製到其餘區域,從而避免了 CMS 遇到的內存碎片問題。

此外,G1 採用了一個可預測暫停時間模型來達到軟實時的要求。


參考文獻:

    可視化Java垃圾回收: http://www.infoq.com/cn/articles/Visualizing-Java-Garbage-Collection

    Visualizing-Java-GC: http://www.infoq.com/presentations/Visualizing-Java-GC

相關文章
相關標籤/搜索