这两个Java代码中的哪一个更快?

时间:2018-05-11 10:43:37

标签: java memory-management heap-memory

理论上和实际上哪个代码更快:

class ABC{
    File file;

    void method(){   
        file = new File();
    }
}

class ABC{

    void method(){
        File file = new File();
    }
}

其中类ABC仅实例化一次。但是该实例的method()被多次调用。注意:我知道在这种情况下速度实际上是无关紧要的。

1 个答案:

答案 0 :(得分:4)

性能差异不大可能太重要。

在第一个版本中,对File对象有一个有效的引用,直到下一次调用method,但是上一个对象在被替换之后仍然需要进行垃圾回收。在第二个版本中,File对象在method完成的时刻成为孤立对象,可以进行垃圾回收。

因此,第一个版本意味着只要File的实例存在,您将始终至少有一个不可收集的ABC对象留在内存中。但这不太可能是一个问题,除非File消耗不可忽略的内存量(它只包含文件的路径和名称。缓冲文件内容是BufferedReader的工作并且你保留了很多ABC个实例。

但是,您应该担心的是代码清晰度。一般规则是每个变量应尽可能具有最小范围。当可以是一个局部变量时,它应该是局部变量。原因是范围越小,代码可能会影响其值,这使得应用程序更容易调试。如果遇到file突然没有达到预期值的错误,您只需要检查一个方法,而不是整个类。