Java 中的垃圾回收

垃圾回收器是一個自動管理記憶體的程式,其中物件的解除分配由 Java 而不是程式設計師處理。在 Java 程式語言中,使用 new 運算子實現物件的動態分配。建立的物件使用一些記憶體,並且記憶體保持分配狀態,直到有物件的使用參考。

當沒有物件的引用時,假定不再需要它,並且可以回收由該物件佔用的記憶體。當 Java 自動處理解除分配時,沒有明確需要銷燬物件。

實現此目的的技術稱為垃圾回收 - Garbage Collection。當系統中沒有剩餘記憶體要分配時,不取消分配記憶體的程式最終會崩潰,這些程式有記憶體洩漏。

Java 中的垃圾回收在程式的生命週期內自動發生,取消需要釋放記憶體的需要,從而避免記憶體洩漏。在 C 語言中,程式設計師有責任使用 free() 函式取消分配動態分配的記憶體。這就是 Java 記憶體管理的領導地位。

注意:所有物件都在 Heap 記憶體部分中建立。在後面的教程中有更多相關內容。

示例:學習 Java 中的垃圾回收器機制

步驟 1: 將以下程式碼複製到編輯器中。

class Student{
    int a;
    int b;
    public void setData(int c,int d){
        a=c;
        b=d;
    }
    public void showData(){
        System.out.println("Value of a = "+a);
        System.out.println("Value of b = "+b);
    }
    public static void main(String args[]){
        Student s1 = new Student();
        Student s2 = new Student();
        s1.setData(1,2);
        s2.setData(3,4);
        s1.showData();
        s2.showData();
        //Student s3;
        //s3=s2;
        //s3.showData();
        //s2=null;
        //s3.showData();
        //s3=null;
        //s3.showData();
    }
}

步驟 2: 儲存,編譯並執行程式碼。如圖所示,建立了兩個物件和兩個引用變數。

Java 中的垃圾回收是什麼?

步驟 3: 取消註釋行#20,21,22。儲存,編譯和執行程式碼。

步驟 4: 如下圖所示,兩個引用變數指向同一個物件。

Java 中的垃圾回收是什麼?

步驟 5: 取消註釋行#23 和 24.編譯,儲存並執行程式碼

步驟 6: 如下圖所示,s2 變為 null,但 s3 仍指向該物件,不符合 java 垃圾回收的條件。

Java 中的垃圾回收是什麼?

步驟 7: 取消註釋行#25&26。儲存,編譯和執行程式碼

步驟 8: 此時沒有指向物件的引用,並且有資格進行垃圾回收。它將從記憶體中刪除,無法將其檢索回來。

Java 中的垃圾回收是什麼?

如何刪除 Java 中的物件?

  1. 如果要使物件符合垃圾回收條件,請將其引用變數指定為 null。

  2. 原始型別不是物件。它們不能被指定為 null。