java 記憶體回收機制

來源:互聯網
上載者:User

標籤:

1. java的記憶體回收機制主要工作包括:確定哪些對象屬於垃圾,回收無用的對象佔用的空間,使堆中的存活對象緊密排列。

2. Java記憶體回收的演算法:

  引用計數(基本不用):

    當引用指向一個對象時,該對象的引用計數器+1;

    當引用離開對象揮著被標記為null時,引用計數器-1;

    當引用計數器為0時,釋放對象佔用的空間。

    缺陷:如果對象間存在循環參考,可能會發生對象無法被回收的情況。

  停止-複製:

    對象發現:

      從堆棧和靜態儲存區出發遍曆所有引用,找到引用的對象以及該對象包含的所有引用,從而找到所有活著的對象。
    處理:
      暫停程式運行,將活的對象從一個堆複製到另一個堆;
      未被複製的對象屬於垃圾,被複製的對象在新的堆上順序排列;需要修正指向被複製對象的引用;
    缺點:
      需要更多的空間(兩個堆);
      對於穩定點的程式,可能只產生很少的垃圾,這個時候“停止——複製”的比較浪費時間;

  標記——清掃:

    對象發現:

      過程類似“停止複製”,在遍曆的過程中為存活的對象設定標記;

    處理:
      沒有標記的對象屬於垃圾,進行回收,不進行複製,可能造成記憶體不連續。

  分代記憶體回收機制(根據對象的生命週期進行分地區存放,不同地區採用不同的記憶體回收演算法):

    年輕的對象放在年輕地區,這個地區的對象會面臨頻率更高的記憶體回收;
    年輕地區的對象經過若干次記憶體回收之後,如果還繼續存活,機會被放入年老區,這個地區進行記憶體回收的頻率比較低;
    當年老區空間不足時,會觸發全域記憶體回收。

    

關於分代回收的資料:http://developer.51cto.com/art/201201/311696.htm

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.