垃圾回收

ref:https://kb.cnblogs.com/page/106720/

Garbage Collector(垃圾收集器,在不至于混淆的情況下也成為GC)以應(yīng)用程序的root為基礎(chǔ),遍歷應(yīng)用程序在Heap上動(dòng)態(tài)分配的所有對(duì)象[2],通過識(shí)別它們是否被引用來確定哪些對(duì)象是已經(jīng)死亡的、哪些仍需要被使用。已經(jīng)不再被應(yīng)用程序的root或者別的對(duì)象所引用的對(duì)象就是已經(jīng)死亡的對(duì)象,即所謂的垃圾,需要被回收。這就是GC工作的原理。為了實(shí)現(xiàn)這個(gè)原理,GC有多種算法。比較常見的算法有Reference Counting,Mark Sweep,Copy Collection等等。目前主流的虛擬系統(tǒng).NET CLR,Java VM和Rotor都是采用的Mark Sweep算法。

Tool: CLR Profiler
ref: https://www.c-sharpcorner.com/UploadFile/7ca517/monitoring-the-activities-of-garbage-collection-in-net-usin/
download: https://download.cnet.com/CLR-Profiler-for-the-NET-Framework/3001-10250_4-10728853.html

二、 Generational 分代算法

程序可能使用幾百M(fèi)、幾G的內(nèi)存,對(duì)這樣的內(nèi)存區(qū)域進(jìn)行GC操作成本很高,分代算法具備一定統(tǒng)計(jì)學(xué)基礎(chǔ),對(duì)GC的性能改善效果比較明顯。將對(duì)象按照生命周期分成新的、老的,根據(jù)統(tǒng)計(jì)分布規(guī)律所反映的結(jié)果,可以對(duì)新、老區(qū)域采用不同的回收策略和算法,加強(qiáng)對(duì)新區(qū)域的回收處理力度,爭(zhēng)取在較短時(shí)間間隔、較小的內(nèi)存區(qū)域內(nèi),以較低成本將執(zhí)行路徑上大量新近拋棄不再使用的局部對(duì)象及時(shí)回收掉。分代算法的假設(shè)前提條件:

1、大量新創(chuàng)建的對(duì)象生命周期都比較短,而較老的對(duì)象生命周期會(huì)更長(zhǎng);

2、對(duì)部分內(nèi)存進(jìn)行回收比基于全部?jī)?nèi)存的回收操作要快;

3、新創(chuàng)建的對(duì)象之間關(guān)聯(lián)程度通常較強(qiáng)。heap分配的對(duì)象是連續(xù)的,關(guān)聯(lián)度較強(qiáng)有利于提高CPU cache的命中率,.NET將heap分成3個(gè)代齡區(qū)域: Gen 0、Gen 1、Gen 2;

alt

Heap分為3個(gè)代齡區(qū)域,相應(yīng)的GC有3種方式: # Gen 0 collections, # Gen 1 collections, #Gen 2 collections。如果Gen 0 heap內(nèi)存達(dá)到閥值,則觸發(fā)0代GC,0代GC后Gen 0中幸存的對(duì)象進(jìn)入Gen1。如果Gen 1的內(nèi)存達(dá)到閥值,則進(jìn)行1代GC,1代GC將Gen 0 heap和Gen 1 heap一起進(jìn)行回收,幸存的對(duì)象進(jìn)入Gen2。

2代GC將Gen 0 heap、Gen 1 heap和Gen 2 heap一起回收,Gen 0和Gen 1比較小,這兩個(gè)代齡加起來總是保持在16M左右;Gen2的大小由應(yīng)用程序確定,可能達(dá)到幾G,因此0代和1代GC的成本非常低,2代GC稱為full GC,通常成本很高。粗略的計(jì)算0代和1代GC應(yīng)當(dāng)能在幾毫秒到幾十毫秒之間完成,Gen 2 heap比較大時(shí),full GC可能需要花費(fèi)幾秒時(shí)間。大致上來講.NET應(yīng)用運(yùn)行期間,2代、1代和0代GC的頻率應(yīng)當(dāng)大致為1:10:100。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容