1. 程式人生 > 實用技巧 >Java垃圾回收System.gc()的理解

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一定執行.