JAVA中銷燬一個對象的方法

方法一:垃圾回收器程序員

垃圾回收器是Java平臺中用的最頻繁的一種對象銷燬方法。垃圾回收器會全程偵測Java應用程序的運行狀況。當反先有些對象成爲垃圾時,垃圾回收器就會銷燬這些對象,並釋放這些對象所佔用的內存空間。在這裏,程序開發人員須要知道,在哪些狀況下垃圾回收器會認爲這些對象是垃圾對象。一般狀況下,若是發生如下兩種狀況時,系統會認爲這些對象是垃圾對象,須要銷燬。安全

一是將一個NULL值賦值給對象。如用戶先創建了一個對象str1。對象用完了以後,再利用賦值語句,將NULL值賦值給這個對象str1,即便用 str1=NULL的方式將NULL值賦值給這個對象。此時這個對象與內存中對象的存儲地址之間就失去了聯繫。此時內存中的對象就好像成爲了一個無主的對象,就會被垃圾回收器銷燬。不過這也有例外。如如今同一個對象有兩個名字,分別爲str1與str2。此時若只是將NULL值賦值給str1,那麼內存的這個對象仍然有一個主人,即str2。此時這個對象還暫時不會被垃圾回收器回收。除非在代碼中講這個對象所關聯的全部對象名字都賦值爲NULL。此時這個對象才變爲無主的對象,纔會被垃圾回收器回收。在Java中定義本身的工具庫工具

二是對象其超出了做用範圍,這個這個對象就被認爲是垃圾對象,被被垃圾回收器回收並釋放內存。其實對象跟變量同樣,其也有做用域。當超過這個做用域的話,跟變量同樣,這個對象也就無效了,其餘地方不可以再引用這個對象。此時這個對象就是名不副實了。爲此垃圾回收器也把這種超過做用範圍的對象看成垃圾對象來處理。因此說,若是程序員要讓對象中的某些成員變量或者成員方法一直有效的話,就須要採用static關鍵字,讓其在變量銷燬時仍然有效,或則仍然能夠調用這些成員變量與成員方法。對象

方法二:finalize方法內存

雖說垃圾回收器已是一個比較完善的對象銷燬機制,可是其並不可以解決Java語言中全部對象的銷燬問題。如Java語言平臺中,建立對象主要有兩種方式,分別爲利用NEW關鍵字來建立(這是對象建立的主要方式)與不適利用NEW關鍵字來建立。若是Java語言中某些對象不是利用new關鍵字爲對象在內存中分配一塊存儲區域,那麼這種類型的對象就不可以被垃圾回收站回收。即便在代碼中將NULL值賦值給這個對象,仍然不可以被垃圾回收器回收。雖然這種對象比較少,可是畢竟存在。爲了解決這類對象的回收與內存釋放問題,在Java語言中提供了一個finalize的方法。經過這個方法能夠顯示的讓系統回收這個對象。這是一個Object類的方法。一般狀況下,這個方法是被聲明爲protected。程序開發人員在必要的時候,能夠在自定的類中定義這個方法。假設如今程序開發人員定義了這個方法,那麼在對象銷燬時,垃圾回收器會先採用這個方法來銷燬對象。而且在下一次垃圾回收動做發生時,最終釋放對象的內存。作用域

可見,採用了finalize 方法,雖然可讓這個對象被垃圾回收器回收,可是其原理是不一樣的。垃圾回收器是先調用這個方法,而後在下次運行這個垃圾回收做業時再釋放其佔用的內存。另外須要注意的是,這個方法並不必定會保證發生。也就是說,相對來說,其安全性並無垃圾回收器那麼的高。故在實際建立對象時,最好仍是採用new關鍵字來建立比較安全,也更加的方便。由於在利用New關鍵字來建立對象時,在代碼中不須要加入另外額外的代碼。因此從安全性與便利性上來講,筆者都建議採用 new方法爲對象在內存中分配存儲區域,而不建議採用其餘的方式。在採用垃圾回收器的時候,其會自動檢測對象的狀態,而不須要程序員告知。其發現對象超出了做業域範圍或者對象被重置爲空時,其就會被自動銷燬並釋放對象所佔用的內存,這種方式處理起來相對來講更加的安全與便利。開發

方法三:利用System.gc方法強制啓動垃圾回收器變量

垃圾回收器其實自動啓動的。也就是說,垃圾回收機制起會自動監測垃圾對象,並在適當的時候啓動垃圾回收器來銷燬對象,釋放內存。可是這個垃圾回收器也會有不合做的時候。也就是說,這個垃圾回收器不受程序代碼的控制,其具體執行的時間也會不肯定,從而致使上面的finalize方法沒法執行,某些對象沒法及時銷燬。爲此有時候須要利用代碼來強制啓動垃圾回收器,來銷燬對象。原理

筆者平時在給一些學員培訓時,每每將這個垃圾回收器比喻成醫院裏的護士。平時的時候,護士會每隔一段時間來進行查房,看看病人有沒有什麼問題。不過在必要的時候,病人也能夠經過警鈴來呼叫護士。如當鹽水掛完了就能夠要求護士來更換鹽水。其實這個護士按期查房就好像是垃圾回收器會根據應用程序的運行狀況來定時的或者不定時的啓動。而這個警鈴就好像是這個System.go方法。在有須要的時候,程序開發人員能夠在代碼中調用這個方法,來強制讓護士來病房,即強制啓動這個垃圾回收器。採用這個方法,給程序開發人員多了一種主動權,而不須要被動的等着垃圾回收器的啓用。有時候,在代碼種類利用這個方法不按期或者按期的強制啓動垃圾回收器,對及時銷燬垃圾對象可以起到一個輔助與保障做用。垃圾回收

相關文章
相關標籤/搜索