垃圾回收器跟蹤對象的引用,並且當沒有指向某個對象的指針時,它將被標記爲刪除。它不會立即刪除。所以當你編寫currentConsole = null;
時,你只需告訴gc控制檯對象應該被刪除,並且它將在下一個垃圾收集中。
爲了優化你可以調用System.gc();
這會觸發集合,但gc可能會選擇忽略它,所以不能保證控制檯對象在空指定後將被刪除。
垃圾收集間隔是在運行時計算的,主要取決於對象的數量和新分配的頻率,所以最好的辦法是讓GC完成它的工作,在大多數情況下,他會做最好的事情。
最後一般在空任務,是的,他們是在罕見情況下,考慮下面的代碼
void testGCMethod()
{
//Create very big object
VeryBigObjectType o = new VeryBigObjectType();
//do dometinh with o
o.someMethod();
//Do something that takes long time to complete that doesn't involve o
Thread.sleep(1000 * 1000 * 1000);
}// end of method meaning the o pointer has just been freed and the big object has just been marked for deletion.
因此,在這種情況下(如果JIT不重新排列碼)VeryBigObjectType實例將Thread.sleep代碼之前保存在內存中的全部時間,所以一些開發商想要分配Ø由GC
void testGCMethod()
{
//Create very big object
VeryBigObjectType o = new VeryBigObjectType();
//do dometinh with o
o.someMethod();
o=null;
//Do something that takes long time to complete that doesn't involve o
Thread.sleep(1000 * 1000 * 1000);
}// end of method meaning the o pointer has just been freed and the big
這樣的大物體將被刪除(可能)儘快null,以收集並保存一些內存;
你爲什麼要這樣? –
將對象設置爲null的目的是什麼? –
@SamuelKerrien我會知道這是否是一種優化代碼的方法。這是無用的,因爲它是垃圾收集? –