国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

.NET垃圾回收器(GC)原理淺析

2020-01-24 02:11:18
字體:
來源:轉載
供稿:網友

作為.NET進階內容的一部分,垃圾回收器(簡稱GC)是必須了解的內容。本著“通俗易懂”的原則,本文將解釋CLR中垃圾回收器的工作原理。

基礎知識

托管堆(Managed Heap)

先來看MSDN的解釋:初始化新進程時,運行時會為進程保留一個連續的地址空間區域。這個保留的地址空間被稱為托管堆。

“托管堆也是堆”,為什么這樣說呢?這么說是希望大家不要被“術語”迷惑,這個知識點的前提是“值類型和引用類型的區別”。這里假設讀者已經知道“值類型存儲在棧中,引用類型存儲在堆中。(引用類型的引用存儲在棧中)”這一重要概念。所以,根據這個理論,除值類型外,CLR要求所有資源都從托管堆分配。

托管堆維護著一個指針,這里命名為NextObjPtr,它指向下一個對象在堆中的分配位置。

CPU寄存器(CPU Register)

這個是計算機基礎知識,這里復習一下,有助于對下面“根”概念的理解。

CPU寄存器是CPU自己的”臨時存儲器”,比內存的存取還快。按與CPU遠近來分,離得最近的是寄存器,然后緩存(計算機一、二、三級緩存),最后內存。

根(Roots)

類中定義的任何靜態字段,方法的參數,局部變量(僅限引用類型變量)等都是根,另外cpu寄存器中的對象指針也是根。根是CLR在堆之外可以找到的各種入口點。

對象可達與不可達(Objects reachable and unreachable)

如果一個根引用了堆中的一個對象,則該對象為“可達”,否則即是“不可達”。

垃圾回收的原因

從計算機組成的角度來講,所有的程序都是要駐留在內存中運行的。而內存是一個限制因素(大小)。除此之外,托管堆也有大小限制。如果托管堆沒有大小限制,那C#的執行速度要優于c了(托管堆的結構讓它有比c運行時堆更快的對象分配速度)。因為地址空間和存儲的限制因素,托管堆要通過垃圾回收機制,來維持它的正常運作,保證對象的分配,不會“內存溢出”。

垃圾回收的基本原理

回收分為兩個階段:  標記

主站蜘蛛池模板: 青田县| 潼关县| 化州市| 鄄城县| 肇源县| 杭锦后旗| 安平县| 武隆县| 新乡县| 丰原市| 东至县| 揭阳市| 台中县| 华坪县| 榆林市| 岑溪市| 沙洋县| 扬中市| 冀州市| 永平县| 乐业县| 湖口县| 灵寿县| 浙江省| 宁乡县| 嘉义市| 桐乡市| 城口县| 富宁县| 谢通门县| 华阴市| 洛扎县| 洛隆县| 五指山市| 云龙县| 宁武县| 潍坊市| 札达县| 华池县| 甘肃省| 罗甸县|