【发布时间】:2014-01-17 09:43:31
【问题描述】:
当对象在方法的本地范围内时,我们应该在 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 似乎没有任何意义,因为它们在方法执行后自动对垃圾回收有效。任何帮助都会很好。
【问题讨论】:
-
对象的范围是本地的...我认为这没有什么区别...一旦您退出块,它们就会为 GC 做好准备...
-
这将使您的代码更难阅读,而不会对性能产生积极影响。所以...
-
你是对的。在 finally 中将本地声明的引用变量设置为 null 不会增加任何性能或帮助垃圾收集 AFAIK
-
不需要设置 null 但需要关闭您的资源,如关闭连接、语句、结果集
-
@DarshanPatel - 好点.. 但那是完全不同的上下文.. 这样的连接不会是本地对象.. 所以,它们必须被关闭.. 并且连接的关闭是异步发生的......
标签: java oop garbage-collection