Java垃圾收集

在java中,垃圾意味著未引用的對象。

垃圾收集是自動回收運行時未使用記憶體的過程。 換句話說,它是一種銷毀未使用對象的方法。

它類似於,在C語言中使用free()函數,在C++中使用delete()。 但是,在java中這些會自動執行。因此,java提供了更好的記憶體管理。

垃圾收集的好處

  • 它使java記憶體有效,因為垃圾收集器從堆記憶體中刪除未引用的對象。
  • 它由垃圾收集器(JVM的一部分)自動完成,因此開發人員不需要額外的工作。

如何對象不被引用?

有以下幾個方法:

  • 通過歸零引用
  • 通過為另一個分配引用
  • 通過匿名對象等

1. 通過歸零引用:

Employee e=new Employee();
e=null;

2. 通過為另一個分配引用:

Employee e1=new Employee();
Employee e2=new Employee();
e1=e2;//now the first object referred by e1 is available for garbage collection

3. 通過匿名對象:

new Employee();

finalize()方法

每次在對象被垃圾回收之前調用finalize()方法。 此方法可用於執行清理處理。 此方法在Object類中定義為:

protected void finalize(){}

注意 :JVM的垃圾收集器僅收集由new關鍵字創建的對象。 因此,如果創建了沒有new的任何對象,則可以使用finalize方法執行清理處理(銷毀剩餘對象)。

gc()方法
gc()方法用於調用垃圾收集器以執行清理處理。 gc()可在SystemRuntime類中找到。

public static void gc(){}

注意 :垃圾收集由稱為垃圾收集器(GC)的守護程式線程執行。 此對象在對象被垃圾回收之前調用finalize()方法。

Java中垃圾收集的簡單示例

public class TestGarbage1{
     public void finalize(){System.out.println("object is garbage collected");}
     public static void main(String args[]){
          TestGarbage1 s1=new TestGarbage1();
          TestGarbage1 s2=new TestGarbage1();
          s1=null;
          s2=null;
          System.gc();
     }
}

執行上面示例代碼,得到以下結果:

object is garbage collected
object is garbage collected

注意 :無論是最終確定還是垃圾收集都不能保證。


上一篇: 多線程執行多任務 下一篇: Java Runtime類