当对象处于方法的局部范围内时,是否应该在finally块中将对象引用为null?这样做解决了哪些性能问题?

码:

Map<String, Map<String, String>> getData(Map<String, String> params) {
    StringBuilder query = new StringBuilder(); // Construct query using it
    ResultSet rs = null;
    try {
        rs = DataUtil.getData(query);
        while(rs.next) {
            // store data in return Map
        }
    } catch(ConnectionException ce){
        ce.printStackTrace();
    } catch(Exception e) {
        e.printStackTrace();
    } finally {
        rs = null;
        query = null;
    }
}


在这里,释放rsquery似乎没有任何目的,因为它们在方法执行后自动对垃圾回收有效。任何帮助都可以。

最佳答案

在某些极端情况下,这可能非常重要:它可以使正在运行的程序与OutOfMemoryException有所不同。考虑以下代码:

long[] hugeAry = new long[Integer.MAX_VALUE]; // barely fits on the heap
... work on hugeAry;
hugeAry = null;
int[] intHugeAry = new int[Integer.MAX_VALUE];
... work on this one


注释掉hugeAry = null很容易导致OOME。这些案例可能比这更奇怪—请查看this related topic on SO

但是,请不要误会我的意思:在99.9%的情况下,使本地人无效(在finally或其他方式中)并不重要。

关于java - 我们是否应该在finally块中将本地对象引用分配为null?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21182572/

10-12 02:37