java - Java 中的引用计数

标签 java concurrency design-patterns

我的系统不断耗尽磁盘空间,因为垃圾收集器没有足够快地释放持有文件句柄的对象。 (文件一直在创建和删除,但由于进程仍然有一个打开的文件句柄,操作系统将其保留在磁盘上)。

对象是共享的,所以一个简单的 try { ... } finally { close(); 不行。

在我看来,我最好的选择是在对象上实现引用计数,并在引用计数变为 0 时关闭文件句柄。但是,我不愿意自己全部实现,正如我怀疑的那样是关于并发的微妙问题。

遗憾的是,谷歌搜索“java 中的引用计数”没有带来任何有用的结果。所以我的问题是:是否有任何资源(文章、示例代码、库)可以帮助实现引用计数?

最佳答案

不要依赖垃圾收集器。它有意设计为不可靠。

如果“共享”意味着您在代码中的多个位置使用它,所以您不能直接关闭它,我建议您更改代码以拥有一个中央文件池,您可以在其中“ check out ”一个文件句柄在本地代码中使用。然后 close() 过程将文件句柄返回到池中。跟踪您的句柄,当给定文件的所有句柄都返回到池中时,您将永久关闭该文件。

关于java - Java 中的引用计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3952930/

相关文章:

python - 将 pyparsing 结果与节点链表相关联的模式

java - 如何使用 Tapestry 在 Web 应用程序中返回文件

java - 如何构造 JFrame 子类?

java - 如何在 Java 迭代器中使用 ExecutorService,而不会有资源泄漏的风险

c++ - 与许多输入小部件接口(interface)的设计方法

design-patterns - 跨微服务的数据一致性

尽管拥有最新的 64 位 Jre,但如果在 Windows 7 64 位上将最大堆大小设置为 >1G,Java 桌面应用程序将无法运行

java - 将 char 数组转换为字节数组并再次返回

Java swing GUI 卡住

concurrency - Elixir:与 worker 一起寻找质数,仅使用 1 个 CPU