java中銷毀一個對象的方法_第1頁
已閱讀1頁,還剩1頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、方法一:垃圾回收器方法一:垃圾回收器垃圾回收器是Java平臺中用的最頻繁的一種對象銷毀方法。垃圾回收器會全程偵測Java應(yīng)用程序的運行情況。當反先有些對象成為垃圾時,垃圾回收器就會銷毀這些對象,并開釋這些對象所占用的內(nèi)存空間。在這里,程序開發(fā)職員需要知道,在哪些情況下垃圾回收器會以為這些對象是垃圾對象。通常情況下,如果發(fā)生以下兩種情況時,系統(tǒng)會以為這些對象是垃圾對象,需要銷毀。一是將一個NULL值賦值給對象。如用戶先建立了一個對象str

2、1。對象用完了之后,再利用賦值語句,將NULL值賦值給這個對象str1,即使用str1=NULL的方式將NULL值賦值給這個對象。此時這個對象與內(nèi)存中對象的存儲地址之間就失往了聯(lián)系。此時內(nèi)存中的對象就似乎成為了一個無主的對象,就會被垃圾回收器銷毀。不過這也有例外。如現(xiàn)在同一個對象有兩個名字,分別為str1與str2。此時若只是將NULL值賦值給str1,那么內(nèi)存的這個對象仍然有一個主人,即str2。此時這個對象還暫時不會被垃圾回收器回收

3、。除非在代碼中講這個對象所關(guān)聯(lián)的所有對象名字都賦值為NULL。此時這個對象才變?yōu)闊o主的對象,才會被垃圾回收器回收。在Java中定義自己的工具庫二是對象其超出了作用范圍,這個這個對象就被以為是垃圾對象,被被垃圾回收器回收并開釋內(nèi)存。實在對象跟變量一樣,其也有作用域。當超過這個作用域的話,跟變量一樣,這個對象也就無效了,其他地方不能夠再引用這個對象。此時這個對象就是名存實亡了。為此垃圾回收器也把這種超過作用范圍的對象當作垃圾對象來處理。所以

4、說,假如程序員要讓對象中的某些成員變量或者成員方法一直有效的話,就需要采用static關(guān)鍵字,讓其在變量銷毀時仍然有效,或則仍然可以調(diào)用這些成員變量與成員方法。方法二:方法二:finalize方法方法固然說垃圾回收器已經(jīng)是一個比較完善的對象銷毀機制,但是其并不能夠解決Java語言中所有對象的銷毀題目。如Java語言平臺中,創(chuàng)建對象主要有兩種方式,分別為利用NEW關(guān)鍵字來創(chuàng)建(這是對象創(chuàng)建的主要方式)與不適利用NEW關(guān)鍵字來創(chuàng)建。假如Ja

5、va語言中某些對象不是利用new關(guān)鍵字為對象在內(nèi)存中分配一塊存儲區(qū)域,那么這種類型的對象就不能夠被垃圾回收站回收。即使在代碼中將NULL值賦值給這個對象,仍然不能夠被垃圾回收器回收。固然這種對象比較少,但是究竟存在。為了解決這類對象的回收與內(nèi)存開釋題目,在Java語言中提供了一個finalize的方法。通過這個方法可以顯示的讓系統(tǒng)回收這個對象。這是一個Object類的方法。通常情況下,這個方法是被聲明為protected。程序開發(fā)職員在

6、必要的時候,可以在自定的類中定義這個方法。假設(shè)現(xiàn)在程序開發(fā)職員定義了這個方法,那么在對象銷毀時,垃圾回收器會先采用這個方法來銷毀對象。并且在下一次垃圾回收動作發(fā)生時,終極開釋對象的內(nèi)存??梢?,采用了finalize方法,固然可以讓這個對象被垃圾回收器回收,但是其原理是不同的。垃圾回收器是先調(diào)用這個方法,然后在下次運行這個垃圾回收作業(yè)時再開釋其占用的內(nèi)存。另外需要留意的是,這個方法并不一定會保證發(fā)生。也就是說,相對來講,其安全性并沒有垃圾

7、回收器那么的高。故在實際創(chuàng)建對象時,最好還是采用new關(guān)鍵字來創(chuàng)建比較安全,也更加的方便。由于在利用New關(guān)鍵字來創(chuàng)建對象時,在代碼中不需要加進另外額外的代碼。所以從安全性與便利性上來說,筆者都建議采用new方法為對象在內(nèi)存中分配存儲區(qū)域,而不建議采用其他的方式。在采用垃圾回收器的時候,其會自動檢測對象的狀態(tài),而不需要程序員告知。其發(fā)現(xiàn)對象超出了作業(yè)域范圍或者對象被重置為空時,其就會被自動銷毀并開釋對象所占用的內(nèi)存,這種方式處理起來相對

8、來說更加的安全與便利。方法三:利用方法三:利用System.gc方法強制啟動垃圾回收器方法強制啟動垃圾回收器垃圾回收器實在自動啟動的。也就是說,垃圾回收機制起會自動監(jiān)測垃圾對象,并在適當?shù)臅r候啟動垃圾回收器來銷毀對象,開釋內(nèi)存。但是這個垃圾回收器也會有分歧作的時候。也就是說,這個垃圾回收器不受程序代碼的控制,其具體執(zhí)行的時間也會不確定,從而導(dǎo)致上面的finalize方法無法執(zhí)行,某些對象無法及時銷毀。為此有時候需要利用代碼來強制啟動垃圾

9、回收器,來銷毀對象。筆者平時在給一些學(xué)員培訓(xùn)時,往往將這個垃圾回收器比喻成醫(yī)院里的。平時的時候,會每隔一段時間來進行查房,看看病人有沒有什么題目。不過在必要的時候,病人也可以通過警鈴來呼喚。如當鹽水掛完了就可以要求來更換鹽水。實在這個定期查房就似乎是垃圾回收器會根據(jù)應(yīng)用程序的運行情況來定時的或者不定時的啟動。而這個警鈴就似乎是這個System.go方法。在有需要的時候,程序開發(fā)職員可以在代碼中調(diào)用這個方法,來強制讓來病房,即強制啟動這個

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論