我“被迫”添加myLocalVar = null;
在离开方法之前将语句放入finally子句中。原因是为了帮助GC。有人告诉我下次服务器崩溃时我会在晚上收到短信,所以我最好这样做:-)。
我认为这是毫无意义的,因为 myLocalVar 的范围仅限于方法,并且一旦方法退出就会“丢失”。额外的空化只会污染代码,但在其他方面是无害的。
我的问题是,这个关于帮助 GC 的神话从何而来? (我被提到“Java内存书籍”)你知道“权威”的任何文章更深入地解释它吗?有没有可能这不是一个神话,而是确实有帮助?如果是这样,怎么办?将局部变量置空可能会造成任何损害吗?
为了澄清,方法如下所示:
void method() {
MyClass myLocalVar = null;
try {
myLocalVar = get reference to object;
... do more here ...
} finally {
if (myLocalVar != null) {
myLocalVar.close(); // it is resource which we should close
}
myLocalVar = null; // THIS IS THE LINE I AM TALKING ABOUT
}
}
有一个旧的 Sun 文档,Java 平台性能 https://web.archive.org/web/20120626144027/http://java.sun.com:80/docs/books/performance/1st_edition/html/JPAppGC.fm.html(遗憾的是,链接现在已损坏,而且我无法找到新的链接),它描述了一种情况,将超出范围的局部变量置空实际上会对 GC 产生影响。
然而,该论文提到了java的一个非常旧的版本。正如中提到的这个问题 https://stackoverflow.com/questions/271613/are-invisible-references-still-a-problem-in-recent-jvms(其中还包含论文中描述的问题的概要),这不再影响当前的 JVM 实现。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)