Java GC 總結

來源:互聯網
上載者:User

標籤:引用   收集   連續   瞭解   片段   垃圾收集器   同名   屬性   jpg   

Java GC垃圾收集器概述
關於JavaGC,有三件事情需要瞭解1.那些記憶體需要回收2.什麼時候回收3.這麼回收
這麼判斷對象已死引用計數法
用一個計數器表示對象的引用,對象被引用就+1,,引用失效-1.不過這個演算法有一個問題,就是對象的相互引用,會使對象無法回收。比如A引用B,B引用A,這兩個對象實際上已經沒用了,但是無法回收。現在的虛擬機器都不會通過該演算法來判斷對象
可達性分析演算法
這個演算法通過一系列稱為"GC Roots"的對象作為起始點,當一個對象到GC Roots沒有任何引用鏈相連時,則證明該對象沒用了。"GC Roots"包括:1.虛擬機器棧引用對象(局部變數表)2.方法去靜態屬性引用對象3方法去中常量引用的對象4,本地方法棧中JNI引用對象具體結構如

記憶體回收演算法標記-清除演算法
如同名字一樣,分為標記和清除兩步,這是最基本的收集演算法,其他演算法都是基於這個思路並且最佳化的。這算個標記和清除效率都不高,而且清除完後有很多不連續的記憶體片段。


複製演算法
就是將記憶體一分為二,將存活的對象複製到另一半,將原來的對象全部刪除。這個演算法很浪費記憶體,浪費了一半的記憶體。現在商業的虛擬機器新生代都是採用這個演算法但並不是1:1的比例,實際比例8:1,會劃分為一個eden和兩個Survivor空間,將eden和其中一個Survivor中存活的複製到另一個Survivor中,空間不足時以來老年代進行分配擔保


標記-整理演算法
與清除一樣,只是不直接清除,是先將存活的對象向一端移動,然後清理掉邊界之外的記憶體


分代收集演算法
將記憶體分為新生代、老年代和永生代三個地區,新生代因為每次會有大量對象死去,使用複製演算法,老年代存活率高,沒有多餘空間對它進行分配擔保,使用標記-清理或者標記-整理演算法

Java GC 總結

聯繫我們

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