gpt4 book ai didi

java - AutoCloseable 与垃圾回收的关系

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:41:19 25 4
gpt4 key购买 nike

所以我已经阅读了有关自动关闭界面的所有内容并尝试使用资源,但这让我想知道:

如果我不(忘记)包装一个实现 AutoCloseable 的类并尝试在使用该类的代码中使用资源,但该类确实从操作系统获取资源,会发生什么情况?虽然无法保证 JVM 何时会决定调用其垃圾收集器,但当它调用时,它会调用 close() 方法吗?

如果不是,这是我会想念 C++ 的析构函数的地方吗? :)是否有类似的方法来确保,从该类的代码而不是用户的代码中,一旦对象应该被释放(例如超出范围),它将释放它所占用的所有操作系统资源?

最佳答案

您不需要添加任何此类文档。只需将其设为 CloseableAutocloseable,每个人都会知道。至多,在用于获取实例的方法/构造函数中添加一个简短的注释“不要忘记调用close()”。

If not,is this where I will miss C++'s destructor?

当然,您会想念他们的。 Java 中没有真正的替代品。 finalize() 和 friend 们相当不可用。在 GC 开始之前,您可能早就用完了资源(文件描述符或类似的东西)。

您可以使用 finalize() 或类似的方法来打印警告。如果对象在之前未关闭的情况下被 GC 处理,则为资源泄漏。

有标记非封闭资源的静态分析工具。不知道,如果他们使用自定义对象,但我敢打赌他们会查看所有实现(自动)可关闭的类。

关于java - AutoCloseable 与垃圾回收的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37344506/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com