java的記憶體回收(2)
阿新 • • 發佈:2018-11-11
1垃圾回收機制只負責回收堆記憶體中除了字串常量池之外的物件,垃圾回收機制是後臺執行緒,因此執行時間不固定,只有在虛擬機器空閒時排程器才有可能排程垃圾回收後臺執行緒,使其佔用處理機,因此垃圾回收後臺執行緒的執行緒執行體不一定什麼時候執行
2可達狀態----可恢復狀態(finalize()之後有引用再次指向)-------不可達狀態(finalize()之後沒有引用再次指向)
3強制系統垃圾回收的方式
System.gc();
Runntime.getRuntime().gc();
這兩種方法只是通知系統進行了垃圾回收,但系統是否進行垃圾回收依然不確定
4在垃圾回收機制真正的回收某一個物件之前,總會先呼叫該物件的finalize()方法,該方法可能時該物件重新被引用指向,從而不會被回收.
在垃圾回收機制回收某個物件所佔用的記憶體之前,通常要求程式呼叫適當的方法來清理資源,在沒有明確指定清理資源的情況下,java提供了預設機制來清理該物件的資源,這個機制就是finalize方法,這個方法是Object類裡的例項方法,我們可以重寫finalize方法,使得物件被重新引用/明確的去清理物件佔用的資源
protected void finalize() throws Throwable
5java.lang.ref包中提供了引用類。代表系統堆物件的3中引用方式:軟引用/虛引用/弱引用
強引用:java程式最常見的引用方式
軟引用:一個物件被軟引用引用時,有可能被垃圾回收機制回收,用於記憶體敏感的程式中
弱引用:一個物件被弱引用引用時,一定被垃圾回收機制回收,