首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >AutoCloseable迭代器到ResultSet调用是否应该从终结器关闭?

AutoCloseable迭代器到ResultSet调用是否应该从终结器关闭?
EN

Stack Overflow用户
提问于 2015-03-11 18:31:34
回答 1查看 766关注 0票数 0

我有一个ResultSet支持的Iterator。我需要做行级的后处理。迭代器实现AutoCloseable整数。连接一直保持打开状态,直到我们遍历被用户中断的所有行/迭代。如果迭代器的使用者显式调用close()方法或将迭代器的使用包装在Java7 try块中,那么一切都很好。但是,如果使用者不这样做,我不能保证连接将返回到池中。在C#世界中,我们将执行终结器并从终结器调用Dispose(bool)作为后备选项。我们应该用Java来做同样的事情吗?

EN

回答 1

Stack Overflow用户

发布于 2015-03-11 18:44:38

这种清理通常不是在Java finalize()方法中完成的(自Java9起就不再推荐了)。未能确保正确处理资源是编程错误;尝试在错误编程之后进行清理将使错误做法得以继续。

更常见的是一个调试选项,可以帮助已经承认自己有问题的开发人员。通常在默认情况下这是不启用的,因为涉及到开销,但是当打开正确的标志时,当资源被分配时会创建堆栈跟踪。如果在未正确销毁资源的情况下调用finalize(),则记录堆栈以显示泄漏的位置。

关于finalize()有许多警告,您通常应该避免它。本例中的主要问题之一是无法保证它将被调用,即使是这样,也可能没有及时提供帮助。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28994628

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档