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

您的位置:首頁技術(shù)文章
文章詳情頁

Java的垃圾回收機(jī)制研究

瀏覽:191日期:2024-06-09 08:43:16

一、誰在做Garbage Collection?

一種流行的說法:在C++里,是系統(tǒng)在做垃圾回收;而在Java里,是Java自身在做。

在C++里,釋放內(nèi)存是手動(dòng)處理的,要用delete運(yùn)算符來釋放分配的內(nèi)存。這是流行的說法。確切地說,是應(yīng)用認(rèn)為不需要某實(shí)體時(shí),就需用delete告訴系統(tǒng),可以回收這塊空間了。這個(gè)要求,對(duì)編碼者來說,是件很麻煩、很難做到的事。隨便上哪個(gè)BBS,在C/C++版塊里總是有一大堆關(guān)于內(nèi)存泄漏的話題。

Java采用一種不同的,很方便的方法:Garbage Collection.垃圾回收機(jī)制放在JVM里。JVM完全負(fù)責(zé)垃圾回收事宜,應(yīng)用只在需要時(shí)申請(qǐng)空間,而在拋棄對(duì)象時(shí)不必關(guān)心空間回收問題。

二、對(duì)象在啥時(shí)被丟棄?

在C++里,當(dāng)對(duì)象離開其作用域時(shí),該對(duì)象即被應(yīng)用拋棄。

是對(duì)象的生命期不再與其作用域有關(guān),而僅僅與引用有關(guān)。

Java的垃圾回收機(jī)制一般包含近十種算法。對(duì)這些算法中的多數(shù),我們不必予以關(guān)心。只有其中最簡(jiǎn)單的一個(gè):引用計(jì)數(shù)法,與編碼有關(guān)。

一個(gè)對(duì)象,可以有一個(gè)或多個(gè)引用變量指向它。當(dāng)一個(gè)對(duì)象不再有任何一個(gè)引用變量指向它時(shí),這個(gè)對(duì)象就被應(yīng)用拋棄了。或者說,這個(gè)對(duì)象可以被垃圾回收機(jī)制回收了。

這就是說,當(dāng)不存在對(duì)某對(duì)象的任何引用時(shí),就意味著,應(yīng)用告訴JVM:我不要這個(gè)對(duì)象,你可以回收了。

JVM的垃圾回收機(jī)制對(duì)堆空間做實(shí)時(shí)檢測(cè)。當(dāng)發(fā)現(xiàn)某對(duì)象的引用計(jì)數(shù)為0時(shí),就將該對(duì)象列入待回收列表中。但是,并不是馬上予以銷毀。

三、丟棄就被回收?

該對(duì)象被認(rèn)定為沒有存在的必要了,那么它所占用的內(nèi)存就可以被釋放。被回收的內(nèi)存可以用于后續(xù)的再分配。

但是,并不是對(duì)象被拋棄后當(dāng)即被回收的。JVM進(jìn)程做空間回收有較大的系統(tǒng)開銷。如果每當(dāng)某應(yīng)用進(jìn)程丟棄一個(gè)對(duì)象,就立即回收它的空間,勢(shì)必會(huì)使整個(gè)系統(tǒng)的運(yùn)轉(zhuǎn)效率非常低下。

前面說過,JVM的垃圾回收機(jī)制有多個(gè)算法。除了引用計(jì)數(shù)法是用來判斷對(duì)象是否已被拋棄外,其它算法是用來確定何時(shí)及如何做回收。JVM的垃圾回收機(jī)制要在時(shí)間和空間之間做個(gè)平衡。

因此,為了提高系統(tǒng)效率,垃圾回收器通常只在滿足兩個(gè)條件時(shí)才運(yùn)行:即有對(duì)象要回收且系統(tǒng)需要回收。切記垃圾回收要占用時(shí)間,因此,Java運(yùn)行時(shí)系統(tǒng)只在需要的時(shí)候才使用它。因此你無法知道垃圾回收發(fā)生的精確時(shí)間。

四、沒有引用變量指向的對(duì)象有用嗎?

前面說了,沒掛上引用變量的對(duì)象是被應(yīng)用丟棄的,這意味著,它在堆空間里是個(gè)垃圾,隨時(shí)可能被JVM回收。

不過,這里有個(gè)不是例外的例外。對(duì)于一次性使用的對(duì)象(有些書稱之為臨時(shí)對(duì)象),可以不用引用變量指向它。舉個(gè)最簡(jiǎn)單也最常見的例子:

System.out.println(“I am Java!”);

就是創(chuàng)建了一個(gè)字符串對(duì)象后,直接傳遞給println()方法。

五、應(yīng)用能干預(yù)垃圾回收嗎?

許多人對(duì)Java的垃圾回收不放心,希望在應(yīng)用代碼里控制JVM的垃圾回收運(yùn)作。這是不可能的事。對(duì)垃圾回收機(jī)制來說,應(yīng)用只有兩個(gè)途徑發(fā)消息給JVM.第一個(gè)前面已經(jīng)說了,就是將指向某對(duì)象的所有引用變量全部移走。這就相當(dāng)于向JVM發(fā)了一個(gè)消息:這個(gè)對(duì)象不要了。第二個(gè)是調(diào)用庫方法System.gc(),多數(shù)書里說調(diào)用它讓Java做垃圾回收。

第一個(gè)是一個(gè)告知,而調(diào)用System.gc()也僅僅是一個(gè)請(qǐng)求。JVM接受這個(gè)消息后,并不是立即做垃圾回收,而只是對(duì)幾個(gè)垃圾回收算法做了加權(quán),使垃圾回收操作容易發(fā)生,或提早發(fā)生,或回收較多而已。

希望JVM及時(shí)回收垃圾,是一種需求。其實(shí),還有相反的一種需要:在某段時(shí)間內(nèi)最好不要回收垃圾。要求運(yùn)行速度最快的實(shí)時(shí)系統(tǒng),特別是嵌入式系統(tǒng),往往希望如此。

Java的垃圾回收機(jī)制是為所有Java應(yīng)用進(jìn)程服務(wù)的,而不是為某個(gè)特定的進(jìn)程服務(wù)的。因此,任何一個(gè)進(jìn)程都不能命令垃圾回收機(jī)制做什么、怎么做或做多少。

六、對(duì)象被回收時(shí)要做的事

一個(gè)對(duì)象在運(yùn)行時(shí),可能會(huì)有一些東西與其關(guān)連。因此,當(dāng)對(duì)象即將被銷毀時(shí),有時(shí)需要做一些善后工作。可以把這些操作寫在finalize()方法(常稱之為終止器)里。

protected void finalize()

{

// finalization code here

}

這個(gè)終止器的用途類似于C++里的析構(gòu)函數(shù),而且都是自動(dòng)調(diào)用的。但是,兩者的調(diào)用時(shí)機(jī)不一樣,使兩者的表現(xiàn)行為有重大區(qū)別。C++的析構(gòu)函數(shù)總是當(dāng)對(duì)象離開作用域時(shí)被調(diào)用。這就是說,C++析構(gòu)函數(shù)的調(diào)用時(shí)機(jī)是確定的,且是可被應(yīng)用判知的。但是,Java終止器卻是在對(duì)象被銷毀時(shí)。由上所知,被丟棄的對(duì)象何時(shí)被銷毀,應(yīng)用是無法獲知的。而且,對(duì)于大多數(shù)場(chǎng)合,被丟棄對(duì)象在應(yīng)用終止后仍未銷毀。

在編碼時(shí),考慮到這一點(diǎn)。譬如,某對(duì)象在運(yùn)作時(shí)打開了某個(gè)文件,在對(duì)象被丟棄時(shí)不關(guān)閉它,而是把文件關(guān)閉語句寫在終止器里。這樣做對(duì)文件操作會(huì)造成問題。如果文件是獨(dú)占打開的,則其它對(duì)象將無法訪問這個(gè)文件。如果文件是共享打開的,則另一訪問該文件的對(duì)象直至應(yīng)用終結(jié)仍不能讀到被丟棄對(duì)象寫入該文件的新內(nèi)容。

至少對(duì)于文件操作,編碼者應(yīng)認(rèn)清Java終止器與C++析構(gòu)函數(shù)之間的差異。

那么,當(dāng)應(yīng)用終止,會(huì)不會(huì)執(zhí)行應(yīng)用中的所有finalize()呢?據(jù)Bruce Eckel在Thinking in Java里的觀點(diǎn):“到程序結(jié)束的時(shí)候,并非所有收尾模塊都會(huì)得到調(diào)用”。這還僅僅是指應(yīng)用正常終止的場(chǎng)合,非正常終止呢?

因此,哪些收尾操作可以放在finalize()里,是需要酌酎的。

標(biāo)簽: Java
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩精品福利一区二区三区| 999久久久免费精品国产| 高清一区二区| 亚洲有吗中文字幕| 麻豆亚洲精品| 亚洲另类黄色| 国产精品久久久久久久久免费高清 | 日韩天堂av| 亚洲精品伊人| 国产精品久久亚洲不卡| 久久av超碰| 亚洲欧洲午夜| 亚洲久久在线| 亚洲精品一区二区在线看| 亚洲一级高清| 一区二区三区网站| 国产精品99一区二区| 视频一区二区三区中文字幕| 中文字幕日韩亚洲| 国产精品99久久免费| 青青青免费在线视频| 亚洲成人三区| 日韩欧美三区| 欧美成人一二区| 欧美日韩中文一区二区| 日本欧美在线看| 免费在线观看一区| 欧美99久久| 久久激情av| 少妇精品导航| 日本精品国产| 久久男人天堂| 亚洲一级淫片| 天堂√8在线中文| 亚洲精品动态| 国产免费久久| 亚洲一区欧美二区| 动漫av一区| 亚洲va久久久噜噜噜久久| 国产成人精品一区二区三区视频| 亚洲精品1区| 欧美二三四区| 久久福利在线| 国产区精品区| 色狠狠一区二区三区| 狠狠爱成人网| 日本免费久久| 国产精品xx| 亚洲国产成人二区| 国产精品日本一区二区不卡视频 | 久久男人天堂| 国产精品久久久久久久久久10秀| 欧美激情一区| 国内揄拍国内精品久久| 麻豆极品一区二区三区| 青青国产91久久久久久| 欧美在线日韩| **爰片久久毛片| 国产欧美一区二区色老头| 日本视频一区二区| 丝袜美腿亚洲一区| 日韩国产在线观看| 久久av超碰| 国产一区二区三区探花| 久久中文字幕一区二区三区| 国产成人精选| 成人自拍av| 美日韩精品视频| 日韩三级久久| 精品视频在线观看网站| 高潮一区二区| 夜夜精品视频| 日韩不卡一区二区| 日韩电影二区| 一区二区亚洲视频| 国产日韩欧美在线播放不卡| 卡一卡二国产精品| 欧美.日韩.国产.一区.二区| 亚洲一区二区三区久久久| 国产精品啊啊啊| 激情综合激情| 久久激五月天综合精品| 久久视频精品| 日韩一区二区三区四区五区| 久久精品国产999大香线蕉| 久久精品欧美一区| 中文字幕日韩高清在线| 精品国产精品国产偷麻豆| 欧美~级网站不卡| 国产精品一在线观看| 国产中文在线播放| 日韩欧美久久| 欧美日韩一二三四| 免费日韩一区二区三区| 91久久久精品国产| 麻豆一区二区99久久久久| 国产亚洲精品久久久久婷婷瑜伽| 久久一区国产| 欧美理论视频| 国产精品免费精品自在线观看| 国产乱人伦精品一区| 肉色欧美久久久久久久免费看| 国产精品激情电影| 色在线中文字幕| 欧美精品99| 蜜臀av在线播放一区二区三区 | 日韩精品一卡| 欧美天堂视频| 国产一区二区三区不卡视频网站 | 亚洲伊人影院| 1024精品一区二区三区| 麻豆中文一区二区| 91成人精品在线| 国产日韩精品视频一区二区三区| 狠狠久久婷婷| 精品中文字幕一区二区三区av| 精品中文在线| 久久精品午夜| 国产成人精品一区二区三区在线| 欧美国产亚洲精品| 美女精品视频在线| 福利一区在线| 日韩欧美一区二区三区在线视频 | 国产成人精品亚洲线观看| 国产成人精品一区二区三区免费 | 在线看片不卡| 1024精品一区二区三区| 日韩av不卡一区二区| 久热综合在线亚洲精品| 亚洲精品在线观看91| 亚洲女同av| 久久精品在线| 亚洲精品欧美| 欧美视频久久| 日本亚洲欧美天堂免费| 中文字幕亚洲在线观看| 清纯唯美亚洲综合一区| 欧美日韩亚洲一区三区| 久久久久久久久成人| 日韩中文欧美| 一区二区电影| 亚洲激情黄色| 欧美久久亚洲| 精品国产免费人成网站| 国产精品久久久久久妇女| 亚洲免费毛片| 69精品国产久热在线观看| 国产中文欧美日韩在线 | 欧美日韩黄网站| 蜜臀国产一区| 免费人成精品欧美精品| 国产欧美91| 91久久在线| 国产一区二区三区探花| 日韩一级网站| 国产精品蜜月aⅴ在线| 日韩大片在线观看| 欧美日韩午夜电影网| 99久精品视频在线观看视频| 91国内精品| 免费看欧美美女黄的网站| 国产成人精品福利| 91精品国产自产在线丝袜啪| 亚洲精品综合| 免费视频亚洲| 国产精品一区二区av日韩在线| 色婷婷久久久| 国产乱码精品一区二区三区亚洲人 | 国产探花在线精品| 国产精品va视频| 欧美在线亚洲综合一区| 老色鬼精品视频在线观看播放| 亚洲高清二区| а√在线中文在线新版| 国产图片一区| 一区二区国产精品| 91精品国产91久久久久久黑人| 国产精选久久| 日韩高清电影一区| 日本大胆欧美人术艺术动态| 私拍精品福利视频在线一区| 久久精品国产亚洲aⅴ| 亚洲不卡视频| 免费在线成人网| 石原莉奈在线亚洲三区| 女人av一区| 国产一区清纯| | 国产aⅴ精品一区二区四区| 国产欧美精品久久| 国产高清日韩| 九九99久久精品在免费线bt| 亚洲欧美久久| 麻豆精品蜜桃| 影视先锋久久| 久久久噜噜噜| 中文亚洲欧美| 亚洲伊人影院| 国产精品丝袜在线播放| 国产精品毛片视频|