垃圾回收器跟踪对象的引用,并且当没有指向某个对象的指针时,它将被标记为删除。它不会立即删除。所以当你编写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我会知道这是否是一种优化代码的方法。这是无用的,因为它是垃圾收集? –