當前位置:編程學習大全網 - 源碼下載 - 什麽是垃圾回收

什麽是垃圾回收

從技術角度上講,垃圾回收無疑是最具神秘色彩的。以前都只聞其名,看了壹下書,算是有了壹些最基本的認識。

下面列舉壹下俺從學習中總結出的幾點:

1:垃圾回收的用途,優勢。

這個,似乎不用多講。但可能對於C++程序員,得說上兩句。

對於內存管理,C++程序員總是又愛又恨。愛來源於對能完全控制內存的自豪。恨是因為來無影去無蹤的內存讀寫錯誤、內存泄漏。好了,C++程序的福音到了,.NET中,凡是拖管方式分配的內存。完全由系統回收,開發者無需理會。這實在是令人振奮不已。(嘿,慢著,這世界上從來沒有免費的午餐,妳當然會為此付出代價地)。

2:垃圾回收的原理

說到原理,不可能壹兩句話說清。偶只能簡單描述壹下,具體可自已去看MSDN資料。

首先,托管代碼為引用類型分配的內存在托管堆中,當托管堆到達壹定滿度(容量)時,執行垃圾收集算法。

2.1:垃圾回收算法依賴於對源碼編譯時建立的對象/地址表,根據程序當前運行的執行點,進行智能判定,確定已無用的對象內存,進行收集,進行必要壓縮,重新指定待分配內存在首地址。未收集的打上標記,提升級別。

2.2:級別壹般是三級。每級設置回收觸發條件的不同閥值,達到閥值,開始收集。有資料將其稱為代齡。註意:大尺寸的對象總被認為是最高代齡的對象(第2代)。

2.3:對於回收對象,如果實現了Finalize,在收集前,會利用復蘇機制,對其復蘇,調用終止化方法,然後再回收。

2.4:.NET支持弱引用機制,對於弱引用,垃圾回收有不同對待。弱引用主要用於特珠性況下的節省內存。

令我感興趣的是垃圾回收的算法,按照原理可以看出,在生存期內的對象也有可能被回收,這正是我前文說過的它的效率高於C++的原因之壹。另外,由於內存成塊,連續,它的收集的速度非常之快。

  • 上一篇:智慧校園是什麽
  • 下一篇:JQuery EasyUI 日期控件 怎樣做到只顯示年月,而不顯示日
  • copyright 2024編程學習大全網