垃圾回收機制具備的特徵
- 垃圾回收機制只負責回收堆內存的對象,不會回收任何物理資源(例如數據庫鏈接、網絡IO等資源)
- 程序沒法精確控制垃圾回收的運行,垃圾回收會在合適的時候進行。當對象永久地失去引用後,系統就會在合適的時候回收它所佔的內存
- 在垃圾回收機制回收任何對象以前,總會先調用它的finalize()方法,該方法可能使該對象從新復活(讓一個引用變量從新引用該對象),從而致使垃圾回收機制取消回收。
對象在內存中的狀態
- 可達狀態:當一個對象被建立後,如有一個以上的引用變量引用它,則這個對象在程序中處於可達狀態。
- 可恢復狀態:若是程序中某個對象再也不有任何引用變量引用它,它就進入了可恢復狀態。
- 不可達狀態:當對象與全部引用變量的關聯都被切斷,且系統已經調用全部對象的finalize()方法後依然沒有使對象變成可達狀態,那麼這個對象將永久的失去引用,最後變成不可達狀態。
public static void main(String[] args) { String a = new String("Grim"); a = new String("Mjx"); }
第一句對象"Grim"爲可達狀態,執行第二句以後"Mjx"是可達狀態。可是"Grim"這個字符串對象變成了可恢復狀態。數據庫
強制觸發垃圾回收方法
- 調用System類的gc()靜態方法:System.gc();
- 調用Runtime對象的gc()實例方法:Runtime.getRuntime().gc();