阅读时间: 2分钟
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(); //创建新物件叫object1GarbageCollectionExample object2 = new GarbageCollectionExample(); //创建新物件叫object2object1.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。