日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

ASP.NET堆和棧四之對托管和非托管資源的垃圾回收和內存分配

瀏覽:353日期:2022-06-08 14:46:42

".NET的堆和棧"系列:

在" ASP.NET堆和棧一之基本概念和值類型內存分配"中,了解了"堆"和"棧"的基本概念,以及值類型的內存分配。我們知道:當執行一個方法的時候,值類型實例會在"棧"上分配內存,而引用類型實例會在"堆"上分配內存,當方法執行完畢,"棧"上的實例由操作系統自動釋放,"堆"上的實例由.NET Framework的GC進行回收。

在" ASP.NET堆和棧二之值類型和引用類型參數傳遞和內存分配"中,我們了解了值類型參數和引用類型參數在傳遞時的內存分配情況。

在" ASP.NET堆和棧三之引用類型對象拷貝和內存分配"中,我們了解了在拷貝引用類型對象時的內存分配情況。

而本篇的重點要放在:對托管和非托管資源的垃圾回收、處理以及內存分配情況。

什么樣的對象被GC認為是垃圾?

當托管堆中的對象不被任何其它對象所引用,這些對象將成為被釋放的垃圾對象等待被GC回收。

每個應用程序都有一組根指針,這些根指針是不會被回收的,是由JIT編譯器和CLR運行時維護的一個列表。主要包括:

  • 全局/靜態指針:指向全局或局部靜態變量
  • 棧指針:指向應用程序線程所需要的那部分棧上空間
  • 寄存器指針:指向托管堆所需要的那部分CPU中的內存地址

以上,假設托管堆中有5個對象,1和5被跟指針引用,3依賴1,那么在這組托管堆對象中,2和4被回收后變成如下:

當運行時有新的引用對象產生,將會被放到托管堆中這組對象的最上面。

GC如何回收?

GC對托管堆中對象的回收

GC采用一定的算法在托管堆中遍歷所有對象,最終形成一個可達對象和不可達對象,不可達對象將被回收。

GC對非托管堆中對象的回收、處理

對資源的回收

比如文件、數據庫鏈接、網絡鏈接等,這些不再托管堆中的對象如何被回收呢?

1、通過析構函數回收
public class Sample{    //析構函數    ~Sample()    {    }}

在托管堆中,那些帶有析構函數的實例,將被放置到"Finalization Queue"中。

對于那些不被任何其它對象所引用,如果沒有析構函數,比如2,將被直接回收,如果有析構函數,例如4,會被放到"Freachable Queue"中,等待GC實施下一輪回收。

當為一個類添加析構函數后,為GC增加了額外的工作,代價是比較昂貴的,更現實的做法是讓類來實現IDisposable接口。

2、通過實現IDisposable接口回收

首先讓一個類實現IDisposable接口。

public class ResourceClass : IDisposable{    public void Dispose()    {//TODO:實現回收邏輯    }}

在應用程序中調用如下實施回收。

using(ResourceClass re = new ResourceClass()){    }

對靜態值類型變量的處理

class Counter{    private static int s_Number = 0;         public static int GetNextNumber()    {int newNumber = s_Number;// DO SOME STUFFnewNumber += 1;s_Number = newNumber;return newNumber;    }}

如上,當方法有方法處理靜態字段就需要注意了,2個線程同時調用GetNextNumber()會得到相同的結果,而我們的本意是:每調用一次方法,靜態字段s_Number自增1。

我們可以在處理邏輯塊中加鎖,每次只允許一個線程執行。

class Counter{    private static int s_Number = 0;         public static int GetNextNumber()    {lock (typeof(Counter)){    int newNumber = s_Number;        // DO SOME STUFF        newNumber += 1;    s_Number = newNumber;    return newNumber;}    }}

對靜態引用類型變量的處理

class Olympics{    public static Collection<Runner> TryoutRunners;} class Runner{    private string _fileName;    private FileStream _fStream;     public void GetStats()    {FileInfo fInfo = new FileInfo(_fileName);_fStream = _fileName.OpenRead();    }}

以上,在GetStats()方法中,由于沒有對FileStream及時關閉,如果Olympics恰巧有10萬個Runner的集合,10萬Runner都執行沒有關閉FileStream的Gettats()方法,這將是一場災難!

Singleton模式可以很好地避免上述問題,它保證了在任何時候,內存中只存在某個類的一個實例。

public class Earth{    private static Earth _instance = new Earth();    private Earth(){}    public static Earth GetInstance(){return _instance;}}

以上,單例模式的必要構成要素包括:
1、私有靜態引用類型變量
2、私有構造函數
3、獲取類實例的靜態方法

GC何時回收?

GC會周期性地執行垃圾回收、內存清理工作,以下情況會啟動GC:

  • 托管堆內存不足溢出時
  • 調用GC.Collect()方法強制執行垃圾回收
  • Windows報告內存不足
  • CLR卸載AppDomain

GC回收之后,又執行哪些操作?

GC在垃圾回收之后,托管堆上將出現多個被收集對象的"空洞",為了避免托管堆的內存碎片,會重新分配內存、壓縮托管堆。

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對的支持。如果你想了解更多相關內容請查看下面相關鏈接

標簽: ASP.NET
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
天堂成人免费av电影一区| 日韩av二区在线播放| 日韩精品导航| 天堂va在线高清一区| 日韩精品免费观看视频| 婷婷综合成人| 国产色噜噜噜91在线精品| 91精品在线免费视频| 人人爱人人干婷婷丁香亚洲| 日韩va亚洲va欧美va久久| 国产美女精品视频免费播放软件| 国产精品日本一区二区不卡视频| 日韩精彩视频在线观看| 国产欧美在线观看免费| 精品免费视频| 性欧美69xoxoxoxo| 日韩精品成人在线观看| 欧美国产一级| 久久国产精品亚洲77777| 日韩欧美2区| 精品精品久久| 亚洲精品va| 欧美日韩午夜电影网| 捆绑调教美女网站视频一区| 日韩欧美视频专区| 99视频精品免费观看| 国产伦乱精品| 美女网站视频一区| 亚洲人成网站在线在线观看| 久久av导航| 香蕉国产精品| 成人综合一区| 涩涩涩久久久成人精品| 色欧美自拍视频| 麻豆91精品| 国产成人免费av一区二区午夜| 日韩视频免费| 国产精品久久久亚洲一区| 亚洲高清二区| 国产+成+人+亚洲欧洲在线| 免费人成精品欧美精品| 亚洲国产福利| 婷婷亚洲精品| 成人精品天堂一区二区三区| 国产一区亚洲| 欧美成人精品一级| 蜜臀av亚洲一区中文字幕| 精品久久美女| 国产欧美午夜| 婷婷综合一区| 先锋影音国产一区| 日韩欧美1区| 精品欧美视频| 国产精品qvod| 国产精品手机在线播放| 在线看片日韩| 国产亚洲激情| 久久高清免费| 人人精品亚洲| av最新在线| 伊人久久在线| 丝袜美腿诱惑一区二区三区| 精品三级在线观看视频| 麻豆国产欧美一区二区三区| 日韩一区二区三区精品视频第3页| 亚洲激情中文| 精品1区2区3区4区| 亚洲免费网址| 在线观看亚洲精品福利片| 一区二区三区午夜视频| 一区二区日韩免费看| 深夜日韩欧美| 日韩美女国产精品| 97精品久久| 美女精品久久| 欧美羞羞视频| 在线亚洲成人| 日本成人在线不卡视频| 欧美国产视频| 日韩在线看片| 一区在线观看| 日韩激情一区二区| 久久尤物视频| 欧美中文字幕一区二区| 亚洲专区一区| 国产欧美二区| 亚洲免费福利| 中文欧美日韩| 欧美一区不卡| 日韩一区二区三区免费| 一区二区三区四区在线观看国产日韩| 婷婷综合成人| 久久久精品网| 国产日产一区| 欧美 日韩 国产精品免费观看| 日韩在线卡一卡二| 精品中文字幕一区二区三区| 久久久久久黄| 欧美有码在线| 一级欧洲+日本+国产| 欧美三区不卡| 在线精品视频在线观看高清| 国产美女亚洲精品7777| 国产66精品| 国产亚洲一区二区三区啪| 亚洲免费网址| 日本国产精品| 国产精品久久久久久久久妇女| 欧美日韩1区2区3区| 亚洲香蕉久久| 日韩精品免费视频人成| 国产不卡精品| 国产欧美日韩影院| 奇米色欧美一区二区三区| 天堂av在线一区| 久久不射网站| 日韩在线一二三区| 日韩一区二区久久| 国产成人精品免费视| 久久激五月天综合精品| 日韩精品视频网站| 亚洲欧洲日韩| 日韩福利视频网| 国产乱人伦精品一区| 国产日产精品_国产精品毛片| 日本伊人午夜精品| 国产伦精品一区二区三区视频 | 国产精品美女久久久| 精品一区在线| 日韩视频在线一区二区三区| 免费在线成人网| 99国产精品久久久久久久成人热| 日韩精品一级中文字幕精品视频免费观看 | 色婷婷成人网| 国产精品草草| 亚洲黄色免费av| 午夜久久美女| 亚洲精品乱码久久久久久蜜桃麻豆| 日韩成人午夜精品| 久久国产尿小便嘘嘘| 欧美好骚综合网| 丝袜美腿亚洲一区| 国产乱子精品一区二区在线观看 | 欧美精品一线| 亚洲欧美视频| 国产精品对白| 成人美女视频| 亚洲男人在线| 黄在线观看免费网站ktv| 国产精品毛片一区二区三区| 国产美女精品视频免费播放软件| 日韩欧美在线中字| 蜜臀av性久久久久蜜臀aⅴ四虎| 欧美激情久久久久久久久久久| 日韩欧美一区二区三区免费看| 伊人精品久久| 成人美女视频| 日本成人在线一区| 久久久成人网| 欧美日韩 国产精品| 久久久久久免费视频| 91成人在线网站| 亚洲欧美日韩精品一区二区| 欧美国产偷国产精品三区| 四虎在线精品| 亚洲国产一区二区在线观看| 久久福利在线| 首页欧美精品中文字幕| 高清日韩中文字幕| 国产视频一区二区在线播放| 国产视频一区在线观看一区免费| 国产一区不卡| 欧美aⅴ一区二区三区视频| 亚洲香蕉视频| 精品一区在线| 久久久9色精品国产一区二区三区| 国产精品videosex极品| 日韩精品高清不卡| 亚洲人成精品久久久| 日韩一级欧洲| 国产精品美女| 久久国产精品久久w女人spa| 欧美1区2区3区| 日韩毛片在线| 天堂日韩电影| 蜜桃tv一区二区三区| 久久婷婷av| 欧美日韩国产在线观看网站| 欧美日韩在线播放视频| 久久在线91| 国产aⅴ精品一区二区四区| 国内精品伊人| 中文字幕人成乱码在线观看| 福利一区在线| 亚洲va中文在线播放免费| 成人日韩在线观看| 免费视频亚洲| 日韩在线一二三区| 国产剧情在线观看一区| 精品一区二区三区中文字幕|