程序員首先是人,不是所有人都是細(xì)心的,更何況細(xì)心的人也會有粗心的時候,因此經(jīng)常會出現(xiàn)忘了釋放已經(jīng)使用完的資源,導(dǎo)致資源緊張。有時候是不愿去做這些掃尾的事情,因為覺得他的時間應(yīng)該是用在更偉大更崇高的事業(yè)上面,至于清理垃圾這些雞毛蒜皮的事實在不值得他一屑。于是就有了垃圾回收機(jī)制,既減輕了程序員的負(fù)擔(dān),也避免了資源的泄漏,一舉兩得。

公司主營業(yè)務(wù):網(wǎng)站設(shè)計、成都做網(wǎng)站、移動網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。成都創(chuàng)新互聯(lián)是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊有機(jī)會用頭腦與智慧不斷的給客戶帶來驚喜。成都創(chuàng)新互聯(lián)推出石城免費做網(wǎng)站回饋大家。
首先了解一下對象的整個生命過程:
1.給對象分配內(nèi)存;
2.調(diào)用對象構(gòu)造器進(jìn)行初始化;
3.使用資源通過訪問對象成員;
4.銷毀對象;主要是通過Finalization,Dispose和Close方法
5.釋放內(nèi)存。
垃圾回收會在第1步和第5步發(fā)生。在第5步進(jìn)行垃圾回收比較好理解,第1步是如何觸發(fā)垃圾回收的呢?第1步包含三個過程:首先根據(jù)類型成員所需空間總合,然后加上兩個額外開銷:類型指針(type object pointer)和同步模塊索引(sync block index),32位系統(tǒng)下一般是8bytes,64位則是16bytes,最后就是判斷當(dāng)前托管堆中是否有足夠的空間去分配這個對象。當(dāng)滿足時就為對象分配所需要的內(nèi)存,如果不滿足就會觸發(fā)垃圾回收,如果垃圾回收后依然不滿足則拋出內(nèi)存不足的異常。另外分配內(nèi)存是連續(xù)分配的,而且在同一時間段里分配內(nèi)存的那些對象一般都有很強(qiáng)的聯(lián)系,比如FileStream和BinaryWriter,連續(xù)分配就會使訪問命中率提高,使得性能優(yōu)化。
關(guān)鍵的問題在于垃圾回收器如何知道哪些對象是垃圾,哪些對象是依然在使用的呢?在CLR中,將那些不再被引用的對象被認(rèn)為是可以被回收的。但對象之間有時候會存在復(fù)雜的調(diào)用關(guān)系,這個時候就需要尋根溯源,找到源頭后,將這一系列的對象都標(biāo)示為正在使用的,直到遍歷完所有的源頭,那些沒被標(biāo)示的就可以被認(rèn)為是垃圾被回收掉。那么源頭是什么呢?在CLR中有個根(root)的概念,每個應(yīng)用程序都有一系列的根,根是一個存儲位置,它保存著一個指向引用類型對象的指針。因此局部變量,全局變量,靜態(tài)變量,方法參數(shù)以及指向托管堆中對象的CPU寄存器都是根。顯然值類型變量是不會為根的。在標(biāo)記和回收之后還有一個過程,夯實(compact)。 垃圾回收器掃描托管堆,找到連續(xù)的內(nèi)存塊,然后移動未回收的對象到更低的地址, 以得到整塊的內(nèi)存,同時所有的對象引用都將被調(diào)整為指向?qū)ο笮碌拇鎯ξ恢谩?/p>
CLR垃圾回收機(jī)制中還有個很重要的概念,代(generation)。其主要目的是提高垃圾回收的性能。一般分為3代:0代,1代和2代。0代是新建對象和從未經(jīng)過垃圾回收對象的集合,1代則是在0代回收過程中未被回收的對象集合,2代是最后一代,也就是經(jīng)歷至少兩次回收風(fēng)暴后依然堅挺的對象的集合
本文名稱:對.NET垃圾回收機(jī)制的初略理解
文章源于:http://chinadenli.net/article10/jighdo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、微信公眾號、響應(yīng)式網(wǎng)站、服務(wù)器托管、品牌網(wǎng)站制作、營銷型網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)