中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

.NET Framework 的垃圾回收器管理應用程序的內存分配和釋放

發布時間:2020-04-10 05:29:05 來源:網絡 閱讀:994 作者:賀俊峰 欄目:編程語言
C#中使用 new 運算符創建對象時,運行庫都從托管堆為該對象分配內存。只要托管堆中有地址空間可用,運行庫就會繼續為新對象分配空間。
但是,內存不是無限大的。最終,垃圾回收器必須執行回收以釋放一些內存。垃圾回收器優化引擎根據正在進行的分配情況確定執行回收的最佳時間。當垃圾回收器執行回收時,它檢查托管堆中不再被應用程序使用的對象并執行必要的操作來回收它們占用的內存。
 
實例化新對象過程: 如圖
.NET Framework 的垃圾回收器管理應用程序的內存分配和釋放 
         首先、計算字段所需空間和對象所需空間。
                   對象所需空間包括兩部分,同步塊索引和類型對象指針。
         再次、分配物理內存,新對象指針指象下一個可用內存區域。
 
 
垃圾回收過程 如下圖
.NET Framework 的垃圾回收器管理應用程序的內存分配和釋放
 
       標記階段:從根標記遍歷到的對象。
       壓縮階段:釋放沒有標記的對象內存,調整存在對象的位置
 
代(Generation)是CLR垃圾收集器的一種機制,它存在的惟一目的就是提高應用程序性能。
CLR初始化時,托管堆中沒有任何對象,此時添加對象是,為第0代對象。
 
CLR支持3代內存
0代對象預算容量為256k
1代對象預算容量為2M
2代對象預算容量為10M
 .NET Framework 的垃圾回收器管理應用程序的內存分配和釋放
 
         第一次初始化是為第0代,當托管堆中第0代放滿時,如果有新對象加入,則觸發CLR
回收垃圾器把第0代中沒有使用的對象清理掉,再把第0代的對象挪到第1代中,之后再把新對象添加托管堆的第0代中。
 
.NET Framework 的垃圾回收器管理應用程序的內存分配和釋放

         如果第0代放滿而第1代沒放滿,CLR回收器只把第0代中不在使用的對象清理掉,而第1代中的不變,之后再把第0代挪入第1代,把新對象添加到第0
 
         當第1代和第1代也放滿時,如果再有新對象加入,則觸發CLR回收垃圾器把第0代和第1代中沒有使用的對象清理掉,再把第0代的對象挪到第1代中,第1代的對象挪到第2代中,之后再把新對象添加托管堆的第0代中。
依次類推
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

离岛区| 西林县| 垦利县| 右玉县| 咸丰县| 望谟县| 基隆市| 辛集市| 霸州市| 石家庄市| 新河县| 栾城县| 鹿泉市| 噶尔县| 青阳县| 巴楚县| 夏邑县| 武定县| 霍州市| 纳雍县| 东乌| 榆树市| 南丹县| 吉木乃县| 十堰市| 阆中市| 班玛县| 邢台县| 龙岩市| 新安县| 舞阳县| 南漳县| 县级市| 凭祥市| 新兴县| 灌阳县| 凤山县| 固镇县| 三都| 且末县| 新龙县|