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: 儲存,編譯並執行程式碼。如圖所示,建立了兩個物件和兩個引用變數。
步驟 3: 取消註釋行#20,21,22。儲存,編譯和執行程式碼。
步驟 4: 如下圖所示,兩個引用變數指向同一個物件。
步驟 5: 取消註釋行#23 和 24.編譯,儲存並執行程式碼
步驟 6: 如下圖所示,s2 變為 null,但 s3 仍指向該物件,不符合 java 垃圾回收的條件。
步驟 7: 取消註釋行#25&26。儲存,編譯和執行程式碼
步驟 8: 此時沒有指向物件的引用,並且有資格進行垃圾回收。它將從記憶體中刪除,無法將其檢索回來。
如何刪除 Java 中的物件?
-
如果要使物件符合垃圾回收條件,請將其引用變數指定為 null。
-
原始型別不是物件。它們不能被指定為 null。