CLR實用特徵 自動記憶體管理 垃圾收集

2022-01-31 07:32:43 字數 1905 閱讀 9730

20.1理解垃圾收集平台的基本工作原理

20.2垃圾收集演算法

20.3垃圾收集與除錯

一旦物件變為不可達的物件,它就成為垃圾收集器的目標---不保證物件在方法的生存期中自始自終的存活。20.

4使用終結操作來釋放本地資源

20.5對託管資源使用終結操作

20.6那些事件會導致finalize方法的呼叫

1. 第0代物件。

2. **顯式呼叫system.gc的靜態方法collect。

3. windows報告記憶體不足。

4. clr解除安裝應用程式域。

5. clr被關閉

20.7終結操作內部揭秘

終結操作現象:我們建立乙個物件,當該物件被執行垃圾收集時,垃圾收集器就會呼叫它的finalize方法。

詳細參見書上的三個圖。

20.8釋放模式:強制物件清理資源

20.9使用實現了釋放模式的型別

20.10c#的using語句

20.11乙個有趣的依賴問題

見書20.12人工監視和控制物件的生存期

為了監視和控制物件的生存期,可以呼叫gchandle的靜態方法alloc。

該方法的引數:需要監視的物件的引用、gchandletype

public

enum

gchandletype

20.13物件復甦

20.14物件的代

1.clr支援3個代:第0代,第1代,第2代。

2.第0代物件就是新構建的物件。

3.代是垃圾收集器的一種機制,它存在的唯一目的就是提**用程式的效能。

20.15使用本地資源的其他垃圾收集特性

現象:有時,本地資源會消耗大量記憶體,但包裝該資源的託管物件只占用了非常少的記憶體。(如位圖)

gc提供的兩個靜態方法:

addmemorypressure(int64 bytesallocated);

removememorypressure(int64 bytesallocated);

20.16**需求較多記憶體的操作能否成功

現象:實現乙個演算法時,使用了大量的記憶體。如果記憶體耗盡,clr會丟擲異常。我們也需要做大量工作進行恢復。

system.runtime提供了乙個memoryfailpoint類,它在執行記憶體消耗巨大的演算法時為我們提供了這種檢測記憶體不足的能力。

public

class

sometype

}catch(insufficientmemoryexception e)}}

20.17

程式設計控制垃圾收集器

system.gc

提供了直接控制垃圾收集器的一些方法。

internal

sealed

class

genobj

public

static

void main()

}maximum generations:2

gen 0

gen 1

gen 2

collecting gen 0

collecting gens 0,and 1

collecting gens 0,1,and 2

in finalize method

20.18

與垃圾收集器效能相關的其他一些話題

1.免同步的多執行緒分配。

2.可擴充套件並行收集。

3. 併發收集。

4.大尺寸物件。

20.19

監視垃圾收集器

gc提供了兩個靜態方法,可以檢視某個指定的代已經執行了多少次垃圾收集操作:

int64 gettotalmemory(boolean forcefullcollection);

int32 collectioncount(int32 generation);

重溫CLR(一)CLR基礎

如果乙個c developer,對clr沒有了解,那就只能是入門級別。未來.net core是趨勢,但是.net core 也是基於coreclr的,而clr和coreclr其實差別不大,從runtime那部分看幾乎沒有區別,程序管理,gc,jit這些基本上是一樣的。clr vie c 這本書很久之...

搜狗輸入法特實用功能

搜狗拼音輸入法是目前我們國內大部分網民的選擇,可是使用拼音輸入法必須會拼音,我貌似在講廢話,呵呵。好了不和大家嘮嗑了,來點關鍵內容 當大家遇到不會拼的字時怎麼辦?搜狗拼音輸入法能解決這個問題嗎?我給大家肯定的答覆,可以。比如我們要打 贇 字 我們可以在搜狗輸入法的擴充套件功能裡面使用手寫輸入,具體的...

CLR 設計型別

clr 設計型別 前言好記性不如爛 筆頭 系列。目錄型別基礎 基元型別 引用型別和值型別 型別與成員 常量與字段 方法型別基礎 執行時 要求每個型別最終都從system.object 型別派生。由於所有型別最終都從system.object 派生,所以可以保證每個型別的每個物件都有一組最基本的方法。...