Java虛擬機器學習 - 垃圾收集演算法(3)

來源:互聯網
上載者:User

標籤:空間   a20   整理   相對   效率   之間   基礎   移動   簡單   

 跟蹤收集器      跟蹤收集器採用的為集中式的管理方式,全域記錄對象之間的引用狀態,執行時從一些列GC  Roots的對象做為起點,從這些節點向下開始進行搜尋所有的引用鏈,當一個對象到GC  Roots 沒有任         何引用鏈時,則證明此對象是停用。      中,對象Object6、Object7、Object8雖然互相引用,但他們的GC Roots是不可到達的,所以它們將會被判定為是可回收的對象。可作為GC Roots 的對象包括:        虛擬機器棧(棧幀中的本地變數表)中的引用對象。        方法區中的類靜態屬性引用的對象        方法區中的常量引用的對象        本地方法棧中JNI的引用對象。 主要有複製、標記清除、標記壓縮三種實現演算法。  1. 標記 - 清除演算法  

      標記清除演算法是最

     它的主要缺點:

     ①.標記和清除過程效率不高 

     ②.標記清除之後會產生大量不連續的記憶體片段。

2. 複製演算法 

       它將可用記憶體容量劃分為大小相等的兩塊,每次只使用其中的一塊。當這一塊用完之後,就將還存活的對象複製到另外一塊上面,然後在把已使用過的記憶體空間一次清理掉。這樣使得每次都是對        其中的一塊進行記憶體回收,不會產生片段等情況,只要移動堆訂的指標,按順序分配記憶體即可,實現簡單,運行高效。

       主要缺點:

       記憶體縮小為原來的一半。

3. 標記  - 整理演算法 

標記操作和“標記-

主要缺點:

在標記-清除的基礎上還需進行對象的移動,成本相對較高,好處則是不會產生記憶體片段。

引用計數收集器              引用計數收集器採用的是分散式管理方式,通過計數器記錄對象是否被引用。當計數器為0時說明此對象不在被使用,可以被回收。

             主要缺點:

            循環參考的情境下無法實現回收,例如下面的圖中,ObjectC和ObjectB相互引用,那麼ObjectA即便釋放了對ObjectC、ObjectB的引用,也無法回收。sunJDK在實現GC時未採用這種方式。

 

 

轉自http://blog.csdn.net/java2000_wl/article/details/8022293

Java虛擬機器學習 - 垃圾收集演算法(3)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.