你需要空对象吗?

时间:2014-09-18 06:41:19

标签: java android libgdx

重复 - How to destroy java objects?

我的问题非常简单。我是Java的应用程序开发的新手,我不确定在完成它之后是否需要null对象。例如,我使用libGDX创建游戏,我创建了几个对象(Actors)。当我完成它们时,我只需要打电话

obj.remove();

或者我应该 -

obj.remove();
obj = null;

通过归零对象来节省内存还是没有优势?

3 个答案:

答案 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启动。