Garbage collection 就是指垃圾回收,在Java中是一個程式負責自動執行記憶體管理。利用Garbage collection可以找到沒有用的物件(Object)和刪除它們,從而釋放記憶體。
還有,這個Garbage collection只發生在Heap記憶體區間。
而觸動Garbage collection的機制就是當物件再沒有被參照(Reference),就表示那個物件已經沒有用途,所以可以重新分配它所佔用的記憶體。
如果沒有重新分配沒用的物件的記憶體,就會出現memory leak。最終導致系統的記憶體不足。
例子解釋:
public class GarbageCollectionExample {
int results1;
String results2;
//設置物件的內容
public void setData(int results3,String results4){
results1=results3;
results2=results4;
}
//顯示物件的內容的方法
public void showData(){
System.out.println("Value of results1 = " + results1);
System.out.println("Value of results2 = " + results2);
}
public static void main(String args[]){
GarbageCollectionExample object1 = new GarbageCollectionExample(); //創建新物件叫object1
GarbageCollectionExample object2 = new GarbageCollectionExample(); //創建新物件叫object2
object1.setData(100,"A"); //設置物件的內容
object2.setData(50,"B"); //設置物件的內容
object1.showData(); //顯示物件的內容
object2.showData(); //顯示物件的內容
GarbageCollectionExample object3; //創建新物件叫object3
object3=object2; //將object2的reference 完完整整地copy去到 object3
object3.showData(); //顯示物件的內容 (會與object2一樣)
object2=null; //把object2設為null,即移除所有reference
object3.showData(); //顯示物件的內容
object3=null; //把object3設為null,即移除所有reference
object1.showData();
object3.showData(); //會出現錯誤許訊息
}
}
運用以上程式會出現的結果:
由於object3.showData();中的object3已經沒有任何reference,
只是null,不存在任何東西。
所以會出現"NullPointerException"。
另外,會留意到object1是不受影響的,
因為在整個過程中,沒有去修改object1的reference。
所以修改其他object的動作都不會影響object1。