1. 程式人生 > >Java中不使用的物件為什麼要手動設定為null

Java中不使用的物件為什麼要手動設定為null

public class GCSetNullTest {
public static void main(String[] args) {
{
byte[] placeholder = new byte[64 * 1024 * 1024];//64m空間
}
//加入這一行,才會回收64m記憶體。因為區域性變量表的變數槽有複用的特性
int i = 0;//不加這行的話,GC Root一部分的變量表仍存存有對placeholder的關聯
System.gc();
}

}

如果遇到一個方法,其後面的程式碼有一些耗時很長的操作,而前面又定義了佔用了大量記憶體、實際上已經不再使用的變數,手動將其設定為null值(用來替代那句 int i =0 ;把變數的區域性變量表slot清空)便不見得是一個絕對無意義的操作,這種操作可以作為一種在極特殊情形(物件佔用記憶體大、此方法的棧幀長時間不能被回收、方法呼叫次數達不到JIT的編譯條件)下的“奇技”來使用。

摘自 深入理解Java虛擬機器 241頁