Java垃圾回收System.gc()的理解


System.gc()無法保證GC一定執行

  • 在默認情況下,通過System.gc()或者Runtime.getRuntime().gc()的調用,會顯式觸發Full GC,同時對老年代和新生代進行回收,嘗試釋放被丟棄對象占用的內存。
  • JVM實現者可以通過system.gc()調用來決定JVM的GC行為。而一般情況下,垃圾回收應該是自動進行的,無須手動觸發,否則就太過於麻煩了。
  • 然而System.gc()調用附帶一個免責聲明,無法保證對垃圾收集器的調用(無法保證馬上觸發GC)。

在一些特殊情況下,如我們正在編寫一個性能基准,我們可以在運行之間調用System.gc()。以下示例代碼:

System.runFinalization();//強制調用 失去引用的對象的finalize()方法

public class SystemGCTest {
    public static void main(String[] args) {
        new SystemGCTest();
        System.gc();//提醒jvm的垃圾回收器執行gc,但是不確定是否馬上執行gc
        //與Runtime.getRuntime().gc();的作用一樣。
        System.runFinalization();//強制調用 失去引用的對象的finalize()方法
    }

    @Override
    protected void finalize() throws Throwable {
        super.finalize();
        System.out.println("SystemGCTest 重寫了finalize()");
    }
}

如果注掉System.runFinalization(); 那么控制台不保證一定打印,

從而證明了System.gc()無法保證GC一定執行.

 


免責聲明!

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



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