Java不像c++那樣new 一個對象必須使用delete清除內存中的對象.c++的開發可能會面臨着這樣問題:如果不及時清除內存中的對象,在程序運行時內存中的對象會慢慢耗盡所有的內存而導致系統崩潰!這大概就是所謂的內存泄露吧!但是,如果不小心清除了還在被引用的對象,程序也會產生異常!
當應用程序通過new 語句創建一個Java對象時,JVM會爲這個對象分配一塊內存空間,只要這個對象被引用變量引用,它就一直存在於內存 如果內存沒有對該對象的引用的話必須以回收的方式釋放對象所佔的內存空間的,但是你不用特別的關係這個問題,因爲有強大的Java垃圾回收機制幫我們解決了這個問題.在適當的時候,JVM會自動檢查內存中的對象,看看是否有沒有被引用的對象,如果有的話就清除對象、回收該對象所佔的內存空間.
Java程序何時進行垃圾回收我們無法得知,可能是在內存資源部足的時候,或是在程序空閒的時候。當然你可以"建議"執行垃圾回收,不過也僅僅是"建議",如果此時程序有優先級更高的線程在運行,則垃圾回收並不一定會馬上執行Java中有finalize()方法,它會在對象被回收時被執行,但是我們不能將它當做構造方法來使用,因爲我們並不確定對象資源何時被回收,所以也就不會立即執行我們所指定的代碼,但是我們卻可以使用finalize()來進行一些相關資源的清除工作.
如果我們確定某個對象不再使用,你可以將該對象引用一個null,表示該對象不再被引用,可以使用System.gc()建議JVM進行垃圾回收,當然回收前會執行finalize()方法.
下面就來看兩個小例子:
首先看一下System類中的部分源碼:
創建一個用戶垃圾類:
創建一個垃圾回收測試類: