我有一个系统,它不断地耗尽磁盘空间,因为垃圾收集器没有足够快地释放保存文件句柄的对象。(文件一直在创建和删除,但由于进程仍有一个打开的文件句柄,因此操作系统将其保留在磁盘上)。
这些对象是共享的,所以简单的try { ... } finally { close(); }
是不行的。
在我看来,我最好的选择是在对象上实现引用计数,并在引用计数为0时关闭文件句柄。然而,我不愿意自己实现它,因为我怀疑关于并发性有一些微妙的问题。
遗憾的是,在谷歌上搜索“在java中引用计数”并没有带来任何有用的结果。所以我的问题是:是否有任何资源(文章、示例代码、库)可以帮助实现引用计数?
发布于 2010-10-17 19:29:35
不要依赖垃圾收集器。它被故意设计成不可靠的。
如果“共享”意味着你在代码中的几个地方使用它,所以你不能只是关闭它,我建议你修改你的代码,让它有一个集中的文件池,在那里你可以“签出”一个在本地代码中使用的文件句柄。然后,close()过程将文件句柄返回给池。跟踪您的句柄,当给定文件的所有句柄都返回到池中时,您将永久关闭该文件。
https://stackoverflow.com/questions/3952930
复制相似问题