垃圾回收機制具有的特征
- 垃圾回收機制只負責回收堆內存的對象,不會回收任何物理資源(例如數據庫連接、網絡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();