当对象处于方法的局部范围内时,是否应该在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;
}
}
在这里,释放
rs
和query
似乎没有任何目的,因为它们在方法执行后自动对垃圾回收有效。任何帮助都可以。 最佳答案
在某些极端情况下,这可能非常重要:它可以使正在运行的程序与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/