999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

C#垃圾回收機制驗證實驗的設計與實現

2013-10-23 08:44:42冉彥中張智剛曹婧華楊可揚
長春師范大學學報 2013年10期
關鍵詞:實驗

冉彥中,張智剛,曹婧華,楊可揚

(1.吉林大學和平校區計算機教研室,吉林長春 130062;2.吉林大學農學部圖書館,吉林長春 130062)

在進行Microsoft Visual Studio C#程序設計教學過程中,學生對垃圾回收器的垃圾回收工作機制[1-2]原理難于理解。為此,筆者用C#編程對數字型和字符型對象何時成為垃圾,第0代對象滿256k時啟動垃圾回收器進行垃圾回收以及完整的第0、1、2代對象回收工作的模擬演示3個實驗,便于學生理解其內容。

1 整數類型對象與引用類型對象在內存中的生成期實驗

1.1 實驗窗體設計

在Form 窗體上放Button和RichTextBox 兩個控件對象(圖1),Button1為單擊確定按鈕事件,在RichText-Box1中輸出如圖1 一行字,用代碼編程實現。

圖1 對象生成期實驗圖

在.net中對象是創建在托管堆之上的,以前使用的編程語言創建對象是在非托管堆中的,故編程人員往往忘掉了釋放無用的內存或再試圖訪問已經被釋放的內存,對于非托管編程來說因為這兩類應用程序發生的時間和次序都難于預測,帶來的危害超過了其它大多數的bug,其應用程序的執行結果變得不可預測,在.net中托管堆編程中[3-5],回收內存的工作由垃圾回收機制解決。對于垃圾回收機制,首先要了解對象的生成期,也就是對象什么時候變成垃圾,如圖2。

1.2 代碼實現

圖2 對象生成期代碼斷點調試圖

在int k=10 處設斷點演示對象的生存期(圖2),在程序開始運行的時候,RichTextBox類,button類等創建、運行程序,在托管堆有Mainform類以及成員int tempint,string temps 以及兩個控件RichTextBox1,Button1對象。單擊按鈕,創建一個整數類型k,并把它初值設為10,但它是在堆棧中創建的,被彈出堆棧就沒有用了,按F11 單步執行,創建一個字符串s,它是一個引用類型變量,它在托管堆中創建,整數類型是一個值類型對象,它是在堆棧中創建,按F11 創建一個i,但它是在堆棧中創建的,執行完循環以后,i 就自動消失了,因為再也不會使用它了,執行完button 后引用類型s 變為垃圾,因為它不會再被使用到,因此變為托管堆中的垃圾,它要等待垃圾回收器在某個特定時間里進行回收。當關閉窗體后,以上一些類都會成為垃圾,等待被釋放。

2 0代對象充滿256k時執行垃圾回收器實驗

2.1 實驗設計

實驗設計從控制臺取字符串,每取一字符串就創建構造函數[6-9]public A()

2.2 代碼執行

圖3 構造函數析構函數運行圖

如圖3,類A 對象創建完就成為垃圾,再通過一循環創建一字符數組,創建長度為1000 的字節數組,也就是這個字節數組會占用1k 的空間,第0代對象為250k,每從屏幕取字符,讓它占用50k 空間,回車5 次占用250 空間,此時進行垃圾回收,釋放前面5個對象,從而證實了第0代對象為256k 的內存空間。

3 垃圾回收機制0、1、2代模擬實驗

3.1 實驗設計及過程

創建一個新對象時,若對象的類型定義了Finalize()方法,那么指向該對象的指針將被放到終結鏈表中。終結鏈表上的每一個條目都引用著一個對象,指示Garbage Collector[10-12]在回收這些對象之前調用它們的Finalize()方法,其過程如下。

(1)自創建一個類,并以該對象來進行操作,然后對該類對象集合實現遍歷以及索引,其次是該對象集合的管理類,負責所有對象的ItemCollection,以及0,1,2代對象集合,以及終結鏈表,終結可達隊列。

(2)初始化一個屬性值為隨機值的DataObject 對象。

(3)判斷托管堆0代內存是否充足,判斷過程:

(4)0,1,2代的比較判斷與操作

托管堆0代對象的主要操作。

3.2 代碼運行

圖4 垃圾回收驗機制證實驗圖

當一直添加對象時,執行情況如圖4所示,當托管堆0代對象內存容量256k 不足時,會觸發垃圾器收集;其中先清理可達隊列中的數據對象(含有Finalize()終結方法并且無根,一般情況為在第1 次收集時將終結鏈表中的指針移動至終結可達隊列中,這樣可達隊列中才有指針。第2 次收集就會將可達隊列中的指針清理),將終結鏈表的數據移動到可達隊列后,然后再移除終結鏈表包含的可達隊列的指針。

托管堆1代對象的操作。繼續創建新的對象,在托管堆1代中存在,一直增加,當托管堆0代對象內存不足,并且托管堆1代對象內存也不足時,將導致1代對象的代+1;其中也包括1代對象的清理工作。

托管堆2代對象的操作。托管堆2代對象內存滿了,清理托管堆2代無根對象,托管堆1代對象,對象代+1;托管堆對象全部清理,當托管堆對象2代滿了時會自動清理0,1,2代的垃圾。

4 結語

首次初始化添加對象為0代對象,當托管堆中0代放滿時,若有新對象加入則垃圾回收器把0代中沒有使用的對象回收,把0代的對象挪到1代中,再把新對象添加托管堆的0代中。若0代放滿而1代沒放滿,回收器只把0代中不再使用的對象回收,而1代中的不變,之后再把0代挪入1代,把新對象添加到0代,當第1代也放滿時,若再有新對象加入,垃圾回收器把0代和1代中沒有使用的對象回收,再把0代的對象挪到1代中,1代的對象挪到2代中,之后再把新對象添加托管堆的0代中。由此看出,一般第0代對象回收頻率是最高的,效率也是最高的。

[1]Microsoft Visual C#2008 help[Z].2008.

[2]美國微軟公司Visual C#2005 軟件的幫助信息[Z].2005.

[3]葉傳華.基于C#.NET 的通用數據訪問接口的實現與應用[J].數字技術與應用,2010(10).

[4]郭勝等.C#.NET 程序設計[M].北京:清華大學出版社,2002.

[5][美]微軟公司.Visual C#.NET 語言參考手冊[M].熊盛新,許志慶,李欽,譯.北京:清華大學出版社,2002.

[6]韓彩云,白尚旺,黨偉超,等.基于C#.NET 的系統通用菜單的設計與實現[J].艦船電子工程,2008(11).

[7]賈曉飛.基于.NET 教師檔案管理系統的設計與實現[D].長春:吉林大學,2010.

[8]陳巍.基于.NET 大學生住宿管理系統的設計與實現[D].長春:吉林大學,2011.

[9]李文超.基于.NET 框架的政府文檔信息管理系統的設計與實現[D].長春:吉林大學,2011.

[10]吳茂昌.基于.NET 平臺分層架構的研究[D].武漢:武漢科技大學,2010.

[11]劉甫迎,劉光會,王蓉.C#程序設計教程[M].2 版.北京:電子工業出版社,2008.

[12]施燕妹,陳培,陳發吉.C#語言程序設計教程[M].北京:中國水利水電出版社,2004.

猜你喜歡
實驗
我做了一項小實驗
記住“三個字”,寫好小實驗
我做了一項小實驗
我做了一項小實驗
記一次有趣的實驗
有趣的實驗
小主人報(2022年4期)2022-08-09 08:52:06
微型實驗里看“燃燒”
做個怪怪長實驗
NO與NO2相互轉化實驗的改進
實踐十號上的19項實驗
太空探索(2016年5期)2016-07-12 15:17:55
主站蜘蛛池模板: 国产成人精品18| 亚洲第一网站男人都懂| 激情无码字幕综合| 亚洲成人77777| 日本不卡在线| 一本大道香蕉久中文在线播放 | 综合亚洲网| 亚洲日韩精品无码专区97| 欧美www在线观看| 美女亚洲一区| 天堂网国产| 国产区91| 亚洲国产高清精品线久久| 日本人妻一区二区三区不卡影院 | 亚洲精品成人片在线播放| 国产尹人香蕉综合在线电影 | 欧美另类一区| 国产又粗又爽视频| 成人福利在线观看| 欧美国产视频| 日韩中文无码av超清| 99久久精品视香蕉蕉| 国产美女91呻吟求| 综合人妻久久一区二区精品| 天天躁日日躁狠狠躁中文字幕| 日韩激情成人| 欧美中文字幕在线播放| 亚洲激情区| 久久77777| 国产一级毛片yw| 内射人妻无码色AV天堂| 91久久夜色精品国产网站| 9丨情侣偷在线精品国产| 亚洲人成影视在线观看| 国产成人亚洲日韩欧美电影| 國產尤物AV尤物在線觀看| 特级做a爰片毛片免费69| 丰满人妻被猛烈进入无码| 国产全黄a一级毛片| 日韩中文无码av超清| 青青青视频蜜桃一区二区| 国产精品亚洲αv天堂无码| 免费无码AV片在线观看国产| 午夜啪啪福利| 亚洲AV人人澡人人双人| 国产成人精品在线1区| 午夜丁香婷婷| 9久久伊人精品综合| 伊人久久精品无码麻豆精品| 久久天天躁夜夜躁狠狠| 国产日韩AV高潮在线| 国产手机在线小视频免费观看| 蜜桃视频一区| 毛片免费高清免费| 国产欧美在线观看一区| 午夜在线不卡| 日韩AV无码免费一二三区| 成人国产精品网站在线看| 日本福利视频网站| 九九视频免费看| 亚洲欧洲日韩综合色天使| 日韩a在线观看免费观看| 国产特级毛片| 国产9191精品免费观看| 精品成人一区二区三区电影| 日韩无码黄色| 国产成人免费视频精品一区二区 | 国产网站一区二区三区| 亚洲性视频网站| 无遮挡一级毛片呦女视频| 91久久夜色精品国产网站| 欧美日韩国产精品va| 综合色区亚洲熟妇在线| 亚洲福利网址| 久久精品国产亚洲麻豆| 四虎精品黑人视频| 国产91小视频| 国产成人综合在线视频| 久久婷婷国产综合尤物精品| 国产手机在线ΑⅤ片无码观看| 熟妇丰满人妻| 亚洲成在人线av品善网好看|