亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C#運行時相互關系淺析

2020-01-24 01:25:01
字體:
來源:轉載
供稿:網友

本文主要講述運行時類型、對象、線程棧和托管堆之間的相互關系,靜態方法、實例方法和虛方法的區別,以及內存的分配和回收。

線程棧:在一個進程中可能包含多個線程,一個線程在創建的時候,會分配到一個大小1MB大小的棧,棧用于存儲方法的實參、形參以及方法內部的局部變量,棧是從高位內存地址向地位地址構建的,由于棧有先進后出的特點,所以先定義的變量后被回收。

下面來看一個簡單的例子,讓你更了解線程棧

由于線程棧是從高位開始分配內存,先分配的我就畫在上面了,在調用F1();方法時,分配內存的順序是:name->n->F2的返回地址->Age->name;回收內存的順序當然是反過來的。在一個方法中,應該包含一些序幕代碼,進行一些初始化工作,還有一些尾聲代碼,等方法執行完成之后做一些回收工作。由于方法的返回地址先分配,在方法執行完成的時候回到返回地址,遞歸太深就容易出現棧溢出,請看我的《遞歸再一次讓哥震驚了》,因為參數、局部變量都必須等到方法返回的時候才能回收。

在介紹托管堆之前先看看兩個簡單的類:

publicclassPerson { privateintheight; publicvoidSetHeight(intheight) { this.height = height; } publicvirtualvoidSay(stringword) { } publicstaticstringHead() { return"my head"; } publicstaticintAge = 100; } publicclassStudent : Person { publicoverridevoidSay(stringword) { Console.WriteLine(word); } } 

 

staticvoidMain(string[] args) { Person student = newStudent(); student.Say("Hello cth"); student.SetHeight(172); Person.Head(); Console.ReadLine(); } 

CLR會在第一次訪問一個對象時加載該對象,在這里,定義變量student時會為Person對象在線程棧中分配內存,第一次加載嗎,在構造一個Student對象之前先要加載Student對象,并為Student類型對象分配內存,并構建一個Student對象。對象的地址存入線程棧中的局部變量student 中,我們知道類型對象的內容包含:類型對象指針、同步索引塊、靜態字段和方法(靜態的和非靜態的),不管是類型對象、還是實例類型都必須有類型對象指針、同步索引塊;我們知道靜態字段屬于類,被這個類的所有實例共享,當然靜態字段的內存是在類型本身中分配的,方法也是類的所有實例共享的,他的內存也是在類型本身中分配的,在每一個類型對象中都有一個方法表,類中定義的方法都有一個對應的項。

在構造一個對象的實例時,只需要為類型對象指針、同步索引塊、該對象的實例字段分配內存,對于對象實例來說,類型對象指針可以讓實例訪問類型對象中德靜態字段、方法等。

Student是線程棧中的定義的一個局部變量,保存Student的一個實例的在托管堆中的地址,所以他可以訪問Student對象中的字段,方法,其實訪問方法是通過類型對象指針訪問類型對象Student中的方法表中對象的項。

Say方法的執行過程:變量student指向的是一個Student對象,調用的當然是Student類型對象中的Say方法,盡管在定義student的時候是Person類型,因為他是引用類型,他指向的是托管堆中Student對象的內存,然后遍歷該對象的方法表,找到該方法調用。

特別說明虛方法,JIT在虛方法中加了一些額外的代碼,方法每次調用的時候都會執行這些代碼,這些代碼會檢查發出調用的變量,然后根據這個變量找到其應用的對象,然后調用這個對象的方法,若沒有這些代碼,你覺得CLR是調用父類的方法還是調用之類的方法呢,虛方法帶來方便的同時,也多了這些必須的檢查的代碼。

SetHeight方法的執行過程:和Say方法前面是一樣,只是在遍歷Student對象的方法表時沒有找到該方法,我們知道父類中定義的非private方法都可以被子類繼承,是因為每個類型都定義了一個字段引用了他的基類,如果一個類調用的方法那個方法不是自己定義的,那么編譯器會回溯類層次結構,一直到基類Object,找到相關的方法并調用,如果沒有找到相關的方法就報了異常唄。所以SetHeight方法其實調用的是Person中的SetHeight方法。

Head方法的執行:由于Head方法是靜態方法和上面兩個方法有所不同,調用靜態方法的時候,CLR會定位與靜態方法對象的類型對象,然后在對應實例對象對象的方法表中查找相關的記錄項,如果沒有找到,同樣會回溯。

當執行完student.SetHeight(172);時,student在也沒有被引用,成為垃圾,在其所在的方法返回之前將會被回收,也就是說student實例對象被回收,釋放其所在的內存,而類型對象不會被回收,類型對象的生成周期是:對象被加載到CLR中,直到其所在的AppDomain卸載。靜態字段是他所引用類型的跟,所以被靜態類型引用的對象永遠不會被回收,如果其引用的是一個集合對象,并向其中不斷的加入元素的話,就會造成內存泄露。

以上就是關于C#運行時相互關系的全部內容,希望對大家的學習有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品老女人精品视频| 91精品国产高清自在线看超| 亚洲午夜av电影| 97视频免费在线看| 色综合男人天堂| 日韩黄色av网站| 高清日韩电视剧大全免费播放在线观看| 国产精品日韩欧美综合| 国产成人精品国内自产拍免费看| 久久久久久久影视| 久久中文字幕一区| 欧美国产亚洲视频| 在线亚洲欧美视频| 久久国内精品一国内精品| 亚洲国产精品999| 国产精品国产三级国产aⅴ浪潮| 国产精品午夜国产小视频| 91免费看视频.| 日韩精品免费在线| 91在线精品视频| 亚洲区中文字幕| 日本午夜精品理论片a级appf发布| 日韩av在线一区| 亚洲成年人影院在线| 91精品国产综合久久久久久蜜臀| 国产mv久久久| 高跟丝袜一区二区三区| 麻豆一区二区在线观看| 国产91精品久久久久久| 中文字幕日韩欧美| 欧美日韩爱爱视频| 欧美精品激情在线观看| 91在线视频精品| 色播久久人人爽人人爽人人片视av| 伊人精品在线观看| 国产精品日韩一区| 影音先锋日韩有码| 欧美亚洲第一区| 尤物yw午夜国产精品视频明星| 日韩在线播放一区| 亚洲精品大尺度| 国产成人激情小视频| 国产精品精品国产| 欧美激情图片区| 久久精品国产久精国产一老狼| 亚洲福利视频久久| 九色精品免费永久在线| 亚洲欧美日韩区| 最近2019中文字幕一页二页| 按摩亚洲人久久| 精品国产美女在线| 在线午夜精品自拍| 日本aⅴ大伊香蕉精品视频| 欧美一级电影在线| 国产日韩精品在线观看| 国产91精品最新在线播放| 97涩涩爰在线观看亚洲| 2019精品视频| 日本不卡免费高清视频| 96sao精品视频在线观看| 成人性生交大片免费看视频直播| 亚洲午夜久久久久久久| 欧美日韩高清在线观看| 国产成人精品久久亚洲高清不卡| 91久热免费在线视频| 亚洲日本中文字幕| 成人春色激情网| 国产精品黄色av| 欧美日韩成人在线视频| 欧美多人乱p欧美4p久久| 亚洲成人精品av| 97香蕉久久超级碰碰高清版| 国外日韩电影在线观看| 国产在线精品成人一区二区三区| 精品久久久91| 国语自产精品视频在线看| 免费97视频在线精品国自产拍| 91人人爽人人爽人人精88v| 色在人av网站天堂精品| 欧美成人免费在线观看| 中文字幕亚洲第一| 久久精品视频99| 日韩欧美主播在线| 日韩国产在线播放| 91免费看片在线| 亚洲精品美女视频| 欧美极品在线播放| 97在线精品视频| 日韩av在线免费播放| 国产视频精品一区二区三区| 国产精品igao视频| 日韩av电影在线网| 成人国产精品色哟哟| 色婷婷综合成人av| 亚洲黄一区二区| 伊人伊成久久人综合网小说| 久久久久久91| 国产精品白嫩初高中害羞小美女| 欧美成人午夜激情| 97碰在线观看| 成人黄在线观看| 日本精品中文字幕| 国产剧情久久久久久| 欧美日韩精品中文字幕| 久久久久久久久久久免费| 97香蕉超级碰碰久久免费软件| 裸体女人亚洲精品一区| 国产美女91呻吟求| 91久久久精品| 欧美激情第三页| 国产精品视频最多的网站| 中国日韩欧美久久久久久久久| 91精品视频大全| 国产精品中文在线| 欧美电影免费在线观看| 国产精品视频网站| 国产精品久久久一区| 欧美中文字幕在线播放| 日韩在线观看免费高清完整版| 国产精品高精视频免费| 国产精品久久久av| 精品在线观看国产| 日韩电影免费在线观看中文字幕| 欧美成年人网站| 亚洲男人天堂手机在线| 色综合久久中文字幕综合网小说| 久久99视频免费| 日韩免费黄色av| 国产亚洲精品久久久优势| 精品亚洲va在线va天堂资源站| 日韩激情视频在线播放| 日韩电影免费观看在线| 久久国产精品久久久| 欧美成人免费在线视频| 日韩在线小视频| 国产精品丝袜一区二区三区| 亚洲精品综合久久中文字幕| 成人福利视频在线观看| 一区二区亚洲欧洲国产日韩| 亚洲激情在线视频| 欧美黑人xxxⅹ高潮交| 日韩欧美在线中文字幕| 欧美极品在线视频| 国产精品99久久久久久久久| 欧美午夜女人视频在线| 日韩成人中文电影| 欧美资源在线观看| 欧美野外wwwxxx| 亚洲黄在线观看| 国产成人精品午夜| 国产精品白嫩美女在线观看| 欧美黄色小视频| 国内精品小视频在线观看| 97精品久久久| 亲爱的老师9免费观看全集电视剧| 97免费中文视频在线观看| 91av在线视频观看| 国产精品高精视频免费| 91精品国产乱码久久久久久久久| 欧美野外猛男的大粗鳮| 深夜福利日韩在线看| 国产精品午夜一区二区欲梦| 欧美电影免费观看网站| 国内精品久久久久久影视8|