<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Dotnet程序的內(nèi)存與垃圾回收

      都知道程序運(yùn)行時的變量是放在內(nèi)存里的,從我們學(xué)c++ 就知道有析構(gòu)函數(shù)  malloc,還有學(xué)c#的時候天天 什么垃圾回收 GC 像背八股文樣的 ,但是這個內(nèi)存究竟能分配多少 沒有人想過吧 ,不論做什么對未知的事充滿好奇永遠(yuǎn)是前進(jìn)發(fā)展的源泉,GC 怎樣才能體現(xiàn)GC的運(yùn)作 今天我們就來實驗下吧。

      首先初級的知識還是啰嗦一下:

      構(gòu)造函數(shù)負(fù)責(zé)按照模板在內(nèi)存中實例化對象,當(dāng)然你類的這些附加變量都是放在一起的,那么理所當(dāng)然的我們就定義一個超大的數(shù)組來測試他。然后對應(yīng)的~ClassName(){} 函數(shù)則在示例被銷毀的時候執(zhí)行 也就是垃圾回收的時候。于是乎有了下面這段代碼:

       1 public class Class3
       2 {
       3     public string Name { get; set; }
       4     public int[] ar = null;
       5     public Class3(string _name)
       6     {
       7         Name = _name;
       8 
       9         ar = new int[20000000];
      10         Console.WriteLine("my name is :" + Name);
      11     }
      12 
      13 
      14 
      15     ~Class3()
      16     {
      17         Console.WriteLine("GC working:" + Name);
      18     }
      19 }

       

      按照我們正常人的理解,以及以往C++的經(jīng)驗。你一個方法執(zhí)行 執(zhí)行完畢 所有花括號內(nèi)的自動變量都會被銷毀。但是new出來的東西確不一樣屬于malloc空間的 放在堆上 ,如果沒有hold住地址就不能進(jìn)行有效內(nèi)存控制 進(jìn)而就成了野指針 內(nèi)存泄露。但是 我說但是 按照我們一個神經(jīng)正常的人理解 你要自動化的處理這個事情 你會怎么做?你對象new完 放那 總要有一個東西在運(yùn)行時就像一絲線一樣一直把他掛著掛著的 ,沒有東西把他掛著可不就代表這對象沒用了么。我們建一個winform程序,按鈕事件里先寫段代碼:

       

      1 Random rdm = new Random();
      2 Class3 c1 =new Class3(rdm.Next().ToString());
      3 
      4 c1 = null;
      5 GC.Collect();

      網(wǎng)上說這里做了c1=null后 立即就會觸發(fā)回收,純屬是扯淡,這個完全是未知的, 但是調(diào)用GC.Collect()呢基本上呢確實至多第二次就會觸發(fā)回收。但是如果我沒把GC.Collect()去掉呢讓其發(fā)展呢,這就要看心情了,有時候很久都不會有什么動作c1=null這句要不要都一樣。根據(jù)數(shù)組大小我這邊的運(yùn)行情況基本上存儲4組大概76M就會進(jìn)行回收。如果有引用把對象掛著呢,當(dāng)然 就不會進(jìn)行回收,那么最大可以存多少呢?我這邊特意把配置設(shè)為32位的情況下大概1.14Gb的時候就會溢出。

       1 int cliCount = 0;
       2 List<Class3> clist = new List<Class3>();
       3 
       4 private void button1_Click(object sender, EventArgs e)
       5 {
       6     Random rdm = new Random();          
       7 
       8     Class3 c3 = new Class3(rdm.Next().ToString());
       9     cliCount++;
      10     Console.WriteLine("count:"+cliCount.ToString() );
      11     clist.Add(c3);        
      12 }

       

      如果是x64則上不封頂,注意 內(nèi)存的增長體現(xiàn)在紅框處,滿了后會自動繼續(xù)擴(kuò),會超出實際物理內(nèi)存。由于Windows系統(tǒng)是虛擬內(nèi)存機(jī)制,內(nèi)部進(jìn)行了一些玄妙的處理咱也不了解。不管咋樣對應(yīng)程序來說當(dāng)成正常區(qū)域訪問。

      通過上面的測試可以驗證垃圾回收的機(jī)制基本上還是按照我們常規(guī)理解的套路去運(yùn)作的的。 C++ 的時候要很謹(jǐn)慎 一層一層的 調(diào)用了new 一定別忘了delete 然后析構(gòu)函數(shù)里也是一樣。C#里把好多內(nèi)存分配相關(guān)的弱化了 感覺析構(gòu)函數(shù)差不多成擺設(shè)了。

       

      posted @ 2023-01-07 22:24  assassinx  閱讀(317)  評論(1)    收藏  舉報
      主站蜘蛛池模板: 高清欧美性猛交xxxx黑人猛交| 精品国产大片中文字幕| 国产高清在线精品一本大道| 国产精品中文字幕av| 国内精品大秀视频日韩精品| 亚洲蜜臀av乱码久久| 日本新janpanese乱熟| 超碰人人模人人爽人人喊手机版 | 少妇人妻偷人精品免费| 中文字幕乱妇无码AV在线| 国产一级片内射在线视频| 丰满人妻熟妇乱又仑精品| 亚洲精品成人区在线观看| 亚洲欧洲日韩国内高清| 乱女乱妇熟女熟妇综合网| 亚洲伊人久久综合影院| 奇米四色7777中文字幕| 亚洲国产综合一区二区精品| 亚洲最大日韩精品一区| 久久99精品久久久久久琪琪| 日韩一区二区三区av在线| 久久精产国品一二三产品| 男人扒女人添高潮视频| 色悠悠久久精品综合视频| 中文字幕乱码一区二区免费| 国产午夜三级一区二区三| 日韩一区二区三区在线视频| 深夜福利资源在线观看| 国产在线不卡精品网站| 四虎国产精品永久在线看| 精品无码国产污污污免费| 酒店大战丝袜高跟鞋人妻| 18禁一区二区每日更新| 国产精品久久久久7777| a4yy私人毛片| 视频一区二区 国产视频| 免费av深夜在线观看| 久本草在线中文字幕亚洲| 国产台湾黄色av一区二区| 成人网站网址导航| 成年午夜性影院|