java 垃圾回收步步深入01----整體印象
一.總體概念
1.垃圾收集:不再使用的內存空間應該被回收
2.在C/C++語言中,垃圾回收由程序員負責
3.在Java中,它提供了一種系統級線程跟蹤存儲空間分配情況,在JVM空閒時,檢查並釋放可被釋放的存儲空間。垃圾收集在Java程序運行中是自動收集的,程序員無法干預。
4.垃圾回收回收的是無任何引用的對象佔據的內存空間而不是對象本身
5.System.gc()和Runtime.getRuntime().gc() 調用時用於 顯式 通知JVM可以進行一次垃圾回收,但真正垃圾回收機制具體在什麼時間點開始發生動作這同樣是不可預料的
二.代碼演示
protect void finalize() 來源於Object類
當垃圾收集器覺得一個內存空間無用時就調用finalize 來回收它。
public static void gc() 來源於System類
調用垃圾收集器
// 本類演示java的垃圾回收機制。
public class GarbageDemo {
int index;// 保存對象的索引值。
static int count = 0;// 記錄當前產生了多少個對象。
public GarbageDemo() {
count++;
System.out.println("第" + count + "個對象產生了");
setIndex(count);
}
public void setIndex(int index) {
this.index = index;
}
protected void finalize() {
System.out.println("第" + index + "個對象被回收了");
}
public static void main(String[] args) {
new GarbageDemo();
new GarbageDemo();
new GarbageDemo();
new GarbageDemo();
// 產生了四個GarbageDemo對象,因爲new 一個對象之後,
// 沒有將這個對象的引用賦值給某一個變量,因此,這些對象
// 所佔用的內存沒有被任何的變量所引用,因此這些對象就是一個垃圾了。
System.gc();// 顯示的運行垃圾收集器。沒有這一句代碼是看不見對象被回收的效果的。
}
}
輸出:
第1個對象產生了
第2個對象產生了
第3個對象產生了
第4個對象產生了
第3個對象被回收了
第4個對象被回收了
第2個對象被回收了
第1個對象被回收了