我想编写不泄漏的应用程序,所以我正在寻找避免这种情况的最佳实践。
我总是关闭我的resultSets和Connections。但是我通常不会在完成它们时使我的对象无效并将它们留给GC进行清理。
这是不好的做法吗?当我完成它时,我应该取消我的ArrayLists和Interators吗?
还有其他方法来处理对象以保持内存不变吗?
答案 0 :(得分:1)
完成后,您不需要使局部变量无效:Java编译器足够聪明,可以确定何时丢弃该对象。
另一方面,类成员变量需要以不同的方式考虑:如果集合将对象保存在另一个对象中,则在完成集合后清除集合可能是有意义的。仅当外部对象的生命周期明显长于其集合内对象的生命周期时,这才很重要。否则,垃圾收集器将处理收集对象而无需代码的任何帮助。
答案 1 :(得分:0)
我建议阅读Effective Java Item 6“消除过时的对象引用”。它讨论了问题的许多方面。但基本规则是 Nulling out对象引用应该是例外而不是规范。