亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        C#垃圾回收機(jī)制驗(yàn)證實(shí)驗(yàn)的設(shè)計(jì)與實(shí)現(xiàn)

        2013-10-23 08:44:42冉彥中張智剛曹婧華楊可揚(yáng)
        關(guān)鍵詞:堆棧鏈表吉林大學(xué)

        冉彥中,張智剛,曹婧華,楊可揚(yáng)

        (1.吉林大學(xué)和平校區(qū)計(jì)算機(jī)教研室,吉林長(zhǎng)春 130062;2.吉林大學(xué)農(nóng)學(xué)部圖書館,吉林長(zhǎng)春 130062)

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

        1 整數(shù)類型對(duì)象與引用類型對(duì)象在內(nèi)存中的生成期實(shí)驗(yàn)

        1.1 實(shí)驗(yàn)窗體設(shè)計(jì)

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

        圖1 對(duì)象生成期實(shí)驗(yàn)圖

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

        1.2 代碼實(shí)現(xiàn)

        圖2 對(duì)象生成期代碼斷點(diǎn)調(diào)試圖

        在int k=10 處設(shè)斷點(diǎn)演示對(duì)象的生存期(圖2),在程序開始運(yùn)行的時(shí)候,RichTextBox類,button類等創(chuàng)建、運(yùn)行程序,在托管堆有Mainform類以及成員int tempint,string temps 以及兩個(gè)控件RichTextBox1,Button1對(duì)象。單擊按鈕,創(chuàng)建一個(gè)整數(shù)類型k,并把它初值設(shè)為10,但它是在堆棧中創(chuàng)建的,被彈出堆棧就沒有用了,按F11 單步執(zhí)行,創(chuàng)建一個(gè)字符串s,它是一個(gè)引用類型變量,它在托管堆中創(chuàng)建,整數(shù)類型是一個(gè)值類型對(duì)象,它是在堆棧中創(chuàng)建,按F11 創(chuàng)建一個(gè)i,但它是在堆棧中創(chuàng)建的,執(zhí)行完循環(huán)以后,i 就自動(dòng)消失了,因?yàn)樵僖膊粫?huì)使用它了,執(zhí)行完button 后引用類型s 變?yōu)槔驗(yàn)樗粫?huì)再被使用到,因此變?yōu)橥泄芏阎械睦?,它要等待垃圾回收器在某個(gè)特定時(shí)間里進(jìn)行回收。當(dāng)關(guān)閉窗體后,以上一些類都會(huì)成為垃圾,等待被釋放。

        2 0代對(duì)象充滿256k時(shí)執(zhí)行垃圾回收器實(shí)驗(yàn)

        2.1 實(shí)驗(yàn)設(shè)計(jì)

        實(shí)驗(yàn)設(shè)計(jì)從控制臺(tái)取字符串,每取一字符串就創(chuàng)建構(gòu)造函數(shù)[6-9]public A()

        2.2 代碼執(zhí)行

        圖3 構(gòu)造函數(shù)析構(gòu)函數(shù)運(yùn)行圖

        如圖3,類A 對(duì)象創(chuàng)建完就成為垃圾,再通過一循環(huán)創(chuàng)建一字符數(shù)組,創(chuàng)建長(zhǎng)度為1000 的字節(jié)數(shù)組,也就是這個(gè)字節(jié)數(shù)組會(huì)占用1k 的空間,第0代對(duì)象為250k,每從屏幕取字符,讓它占用50k 空間,回車5 次占用250 空間,此時(shí)進(jìn)行垃圾回收,釋放前面5個(gè)對(duì)象,從而證實(shí)了第0代對(duì)象為256k 的內(nèi)存空間。

        3 垃圾回收機(jī)制0、1、2代模擬實(shí)驗(yàn)

        3.1 實(shí)驗(yàn)設(shè)計(jì)及過程

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

        (1)自創(chuàng)建一個(gè)類,并以該對(duì)象來進(jìn)行操作,然后對(duì)該類對(duì)象集合實(shí)現(xiàn)遍歷以及索引,其次是該對(duì)象集合的管理類,負(fù)責(zé)所有對(duì)象的ItemCollection,以及0,1,2代對(duì)象集合,以及終結(jié)鏈表,終結(jié)可達(dá)隊(duì)列。

        (2)初始化一個(gè)屬性值為隨機(jī)值的DataObject 對(duì)象。

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

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

        托管堆0代對(duì)象的主要操作。

        3.2 代碼運(yùn)行

        圖4 垃圾回收驗(yàn)機(jī)制證實(shí)驗(yàn)圖

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

        托管堆1代對(duì)象的操作。繼續(xù)創(chuàng)建新的對(duì)象,在托管堆1代中存在,一直增加,當(dāng)托管堆0代對(duì)象內(nèi)存不足,并且托管堆1代對(duì)象內(nèi)存也不足時(shí),將導(dǎo)致1代對(duì)象的代+1;其中也包括1代對(duì)象的清理工作。

        托管堆2代對(duì)象的操作。托管堆2代對(duì)象內(nèi)存滿了,清理托管堆2代無根對(duì)象,托管堆1代對(duì)象,對(duì)象代+1;托管堆對(duì)象全部清理,當(dāng)托管堆對(duì)象2代滿了時(shí)會(huì)自動(dòng)清理0,1,2代的垃圾。

        4 結(jié)語

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

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

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

        [3]葉傳華.基于C#.NET 的通用數(shù)據(jù)訪問接口的實(shí)現(xiàn)與應(yīng)用[J].數(shù)字技術(shù)與應(yīng)用,2010(10).

        [4]郭勝等.C#.NET 程序設(shè)計(jì)[M].北京:清華大學(xué)出版社,2002.

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

        [6]韓彩云,白尚旺,黨偉超,等.基于C#.NET 的系統(tǒng)通用菜單的設(shè)計(jì)與實(shí)現(xiàn)[J].艦船電子工程,2008(11).

        [7]賈曉飛.基于.NET 教師檔案管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].長(zhǎng)春:吉林大學(xué),2010.

        [8]陳巍.基于.NET 大學(xué)生住宿管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].長(zhǎng)春:吉林大學(xué),2011.

        [9]李文超.基于.NET 框架的政府文檔信息管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].長(zhǎng)春:吉林大學(xué),2011.

        [10]吳茂昌.基于.NET 平臺(tái)分層架構(gòu)的研究[D].武漢:武漢科技大學(xué),2010.

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

        [12]施燕妹,陳培,陳發(fā)吉.C#語言程序設(shè)計(jì)教程[M].北京:中國(guó)水利水電出版社,2004.

        猜你喜歡
        堆棧鏈表吉林大學(xué)
        吉林大學(xué)學(xué)報(bào)(地球科學(xué)版)
        《吉林大學(xué)學(xué)報(bào)(理學(xué)版)》征稿簡(jiǎn)則
        《吉林大學(xué)學(xué)報(bào)(理學(xué)版)》征稿簡(jiǎn)則
        《吉林大學(xué)學(xué)報(bào)( 理學(xué)版) 》征稿簡(jiǎn)則
        基于二進(jìn)制鏈表的粗糙集屬性約簡(jiǎn)
        跟麥咭學(xué)編程
        基于鏈表多分支路徑樹的云存儲(chǔ)數(shù)據(jù)完整性驗(yàn)證機(jī)制
        嵌入式軟件堆棧溢出的動(dòng)態(tài)檢測(cè)方案設(shè)計(jì)*
        基于堆棧自編碼降維的武器裝備體系效能預(yù)測(cè)
        鏈表方式集中器抄表的設(shè)計(jì)
        中文字幕人妻精品一区| 在线va免费看成| 亚洲另类欧美综合久久图片区| 中文字幕亚洲综合久久| 亚洲免费福利视频网站| 黄污在线观看一区二区三区三州| 欧美成人看片一区二区三区尤物| 无遮无挡爽爽免费视频| 国产主播无套内射一区| 国产日韩乱码精品一区二区| 久久国产在线精品观看| av色综合久久天堂av色综合在 | 熟女熟妇伦av网站| 久久福利资源国产精品999| 亚洲一本之道高清在线观看| 婷婷丁香开心五月综合| 亚洲av乱码一区二区三区按摩| 日韩精品无码视频一区二区蜜桃| 日本一区二区三区中文字幕最新| 精品国产麻豆免费人成网站| 岛国熟女精品一区二区三区| 精品久久久久久成人av| 丰满多毛少妇做爰视频| 日本一区二区三区四区在线看| 91盗摄偷拍一区二区三区| 久久精品国产清自在天天线| 99偷拍视频精品一区二区| 亚洲中文字幕精品久久久久久直播| 国产黄色一区二区三区,| 久久不见久久见www日本网| 男人靠女人免费视频网站| 亚洲V无码一区二区三区四区观看| av天堂手机一区在线| 亚洲女人毛茸茸粉红大阴户传播| 岳好紧好湿夹太紧了好爽矜持| 国产午夜亚洲精品理论片不卡| 黑丝国产精品一区二区 | 久久国产人妻一区二区| 女厕厕露p撒尿八个少妇| 人妻少妇精品无码系列| 国产午夜精品视频观看|