重复 - How to destroy java objects?
我的问题非常简单。我是Java的应用程序开发的新手,我不确定在完成它之后是否需要null对象。例如,我使用libGDX创建游戏,我创建了几个对象(Actors)。当我完成它们时,我只需要打电话
obj.remove();
或者我应该 -
obj.remove();
obj = null;
通过归零对象来节省内存还是没有优势?
答案 0 :(得分:2)
不,您不需要空或手动删除对象。 java垃圾收集器将为您执行此操作,以查找没有引用它们的指针的对象(例如,当对象超出范围时)。
答案 1 :(得分:0)
通常,在java中,将对象引用标记为null
以使其显式符合GC的条件。如果某个对象无法访问,那么它就有资格使用GC,因此,是的,您可以将其标记为null并让GC执行其工作。
只有在没有指向它的引用时,对象才会变为无法访问。
示例:
class MyTest {
@Override
protected void finalize() throws Throwable {
System.out.println("object is unreachable..");
}
}
// In some other class
public static void main(String[] args) {
MyTest o1 = new MyTest();
MyTest o2 = new MyTest();
System.gc();
o1 = null;
System.gc();
System.out.println("hello");
}
O/P:
hello
object is unreachable..
在这里,你可能在“hello”之后有几千行代码。您可能希望通过将对象的引用标记为null来使GC的工作更容易。
答案 2 :(得分:0)
在Java中手动置零对象很糟糕,因为它会降低大多数垃圾收集(GC)算法的速度。 GC会自动检测到某个对象是否可达,然后将其删除。在使对象归零后,仍然使用内存中的空间,并且只有在GC回收空间后才能再次使用它。因此,归零对象不会立即释放您的空间。手动启动GC也是一个坏主意。如果需要,它由VM启动。