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();


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM