也談談Java的垃圾收集(garbage collection)

來源:互聯網
上載者:User

垃圾收集是Java語言非常顯著的特點,不像C語言那樣,老是要考慮什麼數位越界什麼的。什麼是垃圾(garbage)呢?“An object is considered garbage when it can no longer be reached from any pointer in the running program.”首先要瞭解一下記憶體的分配:

  • 靜態分配( Static Allocation ):靜態變數和全域變數的分配形式。
  • 自動分配( Automatic Allocation ):存放基本類型的資料和對象的引用,但對象本身不存放在棧中,而是存放在堆中。在棧中為局部變數分配記憶體的方法。棧中的記憶體可以隨著代碼塊退出時的出棧操作被自動釋放。
  • 動態分配( Dynamic Allocation ):在堆中動態分配記憶體空間,存放用new產生的資料。

所以垃圾收集針對的是堆裡面的對象。那首先想到的最簡單的演算法就是引用計數 (Reference Counting),對每個對象儲存一個引用計數,如果計數為零,那就可以刪除了。但是缺點是,新的對象產生,就需要更新相關的計數;更重要的是無法刪除循環參考(比如兩個對象彼此引用)。


其它的方法都涉及到一個概念root set,簡單的講就是棧裡面的對象引用和堆裡面的對象的集合。從這些對象開始就可以一級一級的trace到所有live的對象了。"Any object referred to by a root is reachable and is therefore a live object. Additionally, any objects referred to by a live object are also reachable. "【3】基於這個的演算法有:

  • 標記-清除(Mark-Sweep)演算法:首先標記出live的對象,那些沒有被標記的就可以被收集了。
  • 複製(Copying)演算法:將記憶體分成兩部分,收集的時候,live的對象從一部分被移動到另一個部分,如此往複。
  • 分代收集(Generational Collecting)演算法:這個也是Java使用的演算法,基於統計結果並綜合了前面演算法優點。

Java的垃圾收集

首先是一個觀察:infant mortality。大意就是很多個物件的存留時間很短,很少的對象會存活很久。因此堆被分成了幾部分,分別存放不同壽命的對象。

 

註:引用自參考【4】


新對象先放到Young裡面,這裡面的對象會經常被收集,如果還存活下來就放到survivor裡面,還能存活下來就放到Tenured裡面。當年輕對象空間快慢了,開始minor collection。當tenured generation需要收集的時候,叫major collection。這個的頻率要低同時也更慢。

 

參考:

【1】http://developer.51cto.com/art/201009/225071.htm

【2】http://blog.csdn.net/javafuns/archive/2007/09/04/1771535.aspx

【3】http://www.artima.com/insidejvm/ed2/gcP.html

【4】http://www.oracle.com/technetwork/java/gc-tuning-5-138395.html

聯繫我們

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