41. 如何手動觸發全量回收垃圾,如何當即觸發垃圾回收

垃圾回收機制具備的特徵

  • 垃圾回收機制只負責回收堆內存的對象,不會回收任何物理資源(例如數據庫鏈接、網絡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();
相關文章
相關標籤/搜索