記憶體回收行程如何確定哪些對象要回收---《深入理解java虛擬機器》

來源:互聯網
上載者:User

標籤:

記憶體回收行程如何確定哪些對象要回收:
  1. 引用計數法

    很多教科書判斷對象是否存活的演算法是這樣的:給對象添加一個引用計數器,每當有一個地發引用它時,計數器值就加1;當引用失效時,計數器值就減1;任何時刻計數器都為0的對象就是不可能再被使用的。

    客觀地說,引用技術演算法的實現簡單,判定效率也很高,在大部分情況下它都是一個不錯的演算法,也有一些比較著名的應用案例,例如微軟的COM技術、使用ActionScript 3 的FlashPlayer、Python語言以及在遊戲指令碼領域中被廣泛應用的Squirrel中都使用了引用計數演算法進行記憶體管理。但是java語言中沒有選用,其中最主要的原因是它很難解決對象之間的相互循環參考的問題

  1. 根搜尋演算法

    在主流的商用程式語言中(java和c#),都是使用根搜尋演算法(GC Roots Tracing)判斷對象是否存活的。這個演算法的基本思路就是通過一系列的名為“GC Roots”的對象作為起始點,從這些節點開始向下搜尋,搜尋所走過的路徑稱為引用鏈(Reference Chain),當一個對象到GC Roots沒有任何引用鏈相連(用圖論的話來說就是從GC Roots到這個對象不可達)時,則證明此對象是停用。 

在java語言裡可作為GC Roots的對象包括下面幾種:
  • 虛擬機器棧(棧幀中的本地變數表)中的引用對象。

  • 方法區中的類靜態屬性引用的對象。

  • 方法區中的常量引用的對象。

  • 本地方法棧中JNI(即Native方法)的引用的對象。

記憶體回收行程如何確定哪些對象要回收---《深入理解java虛擬機器》

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.