欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

.NET的垃圾回收原理-創(chuàng)新互聯(lián)

本篇內(nèi)容主要講解“.NET的垃圾回收原理”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“.NET的垃圾回收原理”吧!

站在用戶的角度思考問題,與客戶深入溝通,找到商南網(wǎng)站設(shè)計與商南網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:成都網(wǎng)站設(shè)計、做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、國際域名空間、虛擬空間、企業(yè)郵箱。業(yè)務(wù)覆蓋商南地區(qū)。基礎(chǔ)知識托管堆(Managed Heap)

先來看MSDN的解釋:初始化新進(jìn)程時,運(yùn)行時會為進(jìn)程保留一個連續(xù)的地址空間區(qū)域。這個保留的地址空間被稱為托管堆。

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

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

.NET的垃圾回收原理

CPU寄存器(CPU Register)

這個是計算機(jī)基礎(chǔ)知識,這里復(fù)習(xí)一下,有助于對下面“根”概念的理解。

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

根(Roots)

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

.NET的垃圾回收原理

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

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

垃圾回收的原因

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

垃圾回收的基本原理

回收分為兩個階段:  標(biāo)記 –> 壓縮

標(biāo)記的過程,其實就是判斷對象是否可達(dá)的過程。當(dāng)所有的根都檢查完畢后,堆中將包含可達(dá)(已標(biāo)記)與不可達(dá)(未標(biāo)記)對象。

標(biāo)記完成后,進(jìn)入壓縮階段。在這個階段中,垃圾回收器線性的遍歷堆,以尋找不可達(dá)對象的連續(xù)內(nèi)存塊。并把可達(dá)對象移動到這里以壓縮堆。這個過程有點(diǎn)類似于磁盤空間的碎片整理。

.NET的垃圾回收原理

如上圖所示,綠色框表示可達(dá)對象,黃色框為不可達(dá)對象。不可達(dá)對象清除后,移動可達(dá)對象實現(xiàn)內(nèi)存壓縮(變得更緊湊)。

壓縮之后,“指向這些對象的指針”的變量和CPU寄存器現(xiàn)在都會失效,垃圾回收器必須重新訪問所有根,并修改它們來指向?qū)ο蟮男聝?nèi)存位置。這會造成顯著的性能損失。這個損失也是托管堆的主要缺點(diǎn)。

基于以上特點(diǎn),垃圾回收引發(fā)的回收算法也是一項研究課題。因為如果真等到托管堆滿才開始執(zhí)行垃圾回收,那就真的太“慢”了。

垃圾回收算法 – 分代(Generation)算法

代是CLR垃圾回收器采用的一種機(jī)制,它唯一的目的就是提升應(yīng)用程序的性能。分代回收,速度顯然快于回收整個堆。

CLR托管堆支持3代:第0代,第1代,第2代。第0代的空間約為256KB,第1代約為2M,第2代約為10M。新構(gòu)造的對象會被分配到第0代,

.NET的垃圾回收原理

如上圖所示,當(dāng)?shù)?代的空間滿時,垃圾回收器啟動回收,不可達(dá)對象(上圖C、E)會被回收,存活的對象被歸為第1代。

.NET的垃圾回收原理

當(dāng)?shù)?代空間已滿,第1代也開始有很多不可達(dá)對象以至空間將滿時,這時兩代垃圾都將被回收。存活下來的對象(可達(dá)對象),第0代升為第1代,第1代升為第2代。

實際CLR的代回收機(jī)制更加“智能”,如果新創(chuàng)建的對象生存周期很短,第0代垃圾也會立刻被垃圾回收器回收(不用等空間分配滿)。另外,如果回收了第0代,發(fā)現(xiàn)還有很多對象“可達(dá)”,

并沒有釋放多少內(nèi)存,就會增大第0代的預(yù)算至512KB,回收效果就會轉(zhuǎn)變?yōu)椋豪厥盏拇螖?shù)將減少,但每次都會回收大量的內(nèi)存。如果還沒有釋放多少內(nèi)存,垃圾回收器將執(zhí)行

完全回收(3代),如果還是不夠,則會拋出“內(nèi)存溢出”異常。

也就是說,垃圾回收器會根據(jù)回收內(nèi)存的大小,動態(tài)的調(diào)整每一代的分配空間預(yù)算!達(dá)到自動優(yōu)化!

總結(jié)

垃圾回收背后有這樣一個基本的觀念:編程語言(大多數(shù)的)似乎總能訪問無限的內(nèi)存。而開發(fā)者可以一直分配、分配再分配——像魔法一樣,取之不盡用之不竭。

.NET垃圾回收器的基本工作原理是:通過最基本的標(biāo)記清除原理,清除不可達(dá)對象;再像磁盤碎片整理一樣壓縮、整理可用內(nèi)存;最后通過分代算法實現(xiàn)性能最優(yōu)化。

到此,相信大家對“.NET的垃圾回收原理”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

當(dāng)前文章:.NET的垃圾回收原理-創(chuàng)新互聯(lián)
當(dāng)前鏈接:http://aaarwkj.com/article38/dpghsp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄、動態(tài)網(wǎng)站標(biāo)簽優(yōu)化、手機(jī)網(wǎng)站建設(shè)網(wǎng)站營銷、關(guān)鍵詞優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)
日本熟女中文字幕一区| 欧美亚洲精品二区久久久| 97人妻人人揉人人澡人人学生| 欧美日韩国产一下老妇| 亚洲av偷拍一区二区三区不卡| 欧美亚洲综合另类色妞| 一区二区三区欧美久久| 蜜桃免费观看在线视频| 日韩在线视频精品一区| 成人在线观看一区二区三区| 欧美v日韩v亚洲综合国产高清| 综合激情四射亚洲激情| 人妻精品久久一区二区三区| 日韩在线国产亚洲精品| 国产精品久久久在线视频| 成人在线免费黄色小说| 欧美成人一区二区三区八| 狠狠综爱五月天的婷婷| 伊人久久九九精品综合| 亚洲国产精品一区二区三区在线 | 日韩精品成人亚洲天堂| 人妻巨乳一区二区三区| 国产又粗又爽视频免费| 精品国产亚洲av剧情| 日本一二三四卡久久精品| 国产一区二区三区午夜视频| 婷婷亚洲悠悠色悠在线| 欧美日韩一区二区三区色拉拉| 91午夜精品在线观看| 亚洲欧美极品一区色婷婷| 亚洲家庭伦理在线观看| 国产91啦中文在线观看| 免费看真人性生活视频| 亚洲精品国产精品乱码不| 免费成人自拍偷拍视频| 国产精品毛片一区二区三| 亚洲精品中文字幕一二三| 91麻豆粉色视频在线| 日韩夫妻性生活免费视频| 亚洲另类熟女国产精品老| 欧美一区二区久久综合|