java垃圾回收機制-編程開發(fā)技術(shù)

java垃圾回收機制-編程開發(fā)技術(shù)

ID:30769035

大?。?16.95 KB

頁數(shù):8頁

時間:2019-01-03

java垃圾回收機制-編程開發(fā)技術(shù)_第1頁
java垃圾回收機制-編程開發(fā)技術(shù)_第2頁
java垃圾回收機制-編程開發(fā)技術(shù)_第3頁
java垃圾回收機制-編程開發(fā)技術(shù)_第4頁
java垃圾回收機制-編程開發(fā)技術(shù)_第5頁
資源描述:

《java垃圾回收機制-編程開發(fā)技術(shù)》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。

1、Java垃圾回收機制-編程開發(fā)技術(shù)Java垃圾回收機制原文出處:海子說到垃圾回收(GarbageCollection,GC),很多人就會自然而然地把它和Java聯(lián)系起來。在J3V3中,程序員不需要去關(guān)心內(nèi)存動態(tài)分配和垃圾回收的問題,這一切都交給了JVM來處理。顧名思義,垃圾回收就是釋放垃圾占用的空間,那么在Java中,什么樣的對彖會被認定為“垃圾”?那么當一些對彖被確定為垃圾之后,采用什么樣的策略來進行回收(釋放空間)?在口前的商業(yè)虛擬機屮,冇哪些典型的垃圾收集器?下面我們就來逐一探討這些問題。以下是本文的目錄大綱:一?如何確定某個對象是“垃圾”?二?典型的垃圾收集

2、算法三?典型的垃圾收集器如果有不正之處,希望諒解和批評指正,不勝感激。一?如何確定某個對象是“垃圾”?在這一小節(jié)我們先了解一個最基本的問題:如果確定某個對彖是“垃圾”?既然垃圾收集器的任務(wù)是回收垃圾對象所占的空間供新的對象使用,那么垃圾收集器如何確定某個對象是“垃圾”?一即通過什么方法判斷一個對象可以被回收了。在javaH*是通過引用來和對彖進行關(guān)聯(lián)的,也就是說如果要操作對象,必須通過引用來進行。那么很顯然一個簡單的辦法就是通過引用計數(shù)來判斷一個對象是否可以被回收。不失一般性,如果一個對象沒有任何引用與Z關(guān)聯(lián),則說明該對象基木不太可能在其他地方被使用到,那么這個對象

3、就成為可被回收的對象了。這種方式成為引用計數(shù)法。這種方式的特點是實現(xiàn)簡單,而且效率較高,但是它無法解決循環(huán)引用的問題,因此在Java屮并沒冇采用這種方式(Python采用的是引用計數(shù)法)??聪露@段代碼:publicclassMain{publicstaticvoidmain(String[]args){MyObjcctobjcctl二newMyObjcct();MyObjectobject2=newMyObject();objectl.object二object2;object2.object=objectl;objectl二nul1;objcct2二null;c

4、lassMyObject{publicObjectobject二null;最后面兩句將objectl和object2賦值為null,也就是說objectl和object2指向的對象已經(jīng)不可能再被訪問,但是rtr丁它們互相引用對方,導(dǎo)致它們的引用計數(shù)都不為0,那么垃圾收集器就永遠不會冋收它們。為了解決這個問題,在Java中采取了可達性分析法。該方法的基本思想是通過一系列的“GCRoots”對象作為起點進行搜索,如果在“GCRoots”和一個對象之間沒有可達路徑,則稱該對象是不可達的,不過要注意的是被判定為不可達的對象不一定就會成為可回收對象。被判定為不可達的對象要成為

5、可冋收對象必須至少經(jīng)歷兩次標記過程,如果在這兩次標記過程中仍然沒冇逃脫成為可回收對象的可能性,則基木上就真的成為可回收對象了。至于可達性分析法具體是如何操作的我暫時也沒冇看得很明白,如果冇哪位朋友比較清楚的話請不吝指教。下面來看個例了:Objectaobj二Objectbobj二Objectcobj二aobj=bobj;aobj=cobj;cobj二null;aobj=nul1;newObject()newObject()newObject()第幾行有可能會使得某個對象成為可回收對象?第7行的代碼會導(dǎo)致有對象會成為可回收對象。至于為什么留給讀者自己思考。再看一個例了

6、:Stringstr二newString(〃hello〃);SoftReferencesr=newSoftReference〈String>(newString(,zjava,/));WeakReferencewr=newWeakReference〈String>(newString(,zworld,z));這三句哪句會使得String對象成為可回收對象?第2句和第3句,第2句在內(nèi)存不足的情況下會將String對象判定為可冋收對象,第3句無論什么情況下String對彖都會被判定為可回收對彖。最后總結(jié)一下平常遇到的比較常見的將對象判定為

7、可回收對象的情況:1)顯示地將某個引用賦值為null或者將已經(jīng)指向某個對彖的引用指向新的對象,比如下面的代碼:Objectobj=newObject();obj=null;Objectobjl=newObject();Objectobj2=newObject();objl=obj2;2)局部引用所指向的對象,比如卜?面這段代碼:voidfun(){for(inti=0;i<10;i++){Objectobj二newObject();System?out?printin(obj?gctClass());}}循環(huán)每執(zhí)行完一次,生成的Object對象都會成為可冋收的對

當前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負責整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細閱讀文檔內(nèi)容,確認文檔內(nèi)容符合您的需求后進行下載,若出現(xiàn)內(nèi)容與標題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。