java中定义eachDir什么意思_java – 未明确关闭流时Files.list(Path dir)中的...

java中定义eachDir什么意思_java – 未明确关闭流时Files.list(Path dir)中的...我最近写了一个小应用程序 定期检查目录的内容 过了一会儿 应用程序因为打开文件句柄太多而崩溃 经过一些调试 我发现以下行中的错误 Files list Paths get destination forEach path Tostuff 然后我检查了文件列表中的 javadoc 我可能应该早些做过 并找到 Thereturneds files list path

我最近写了一个小应用程序,定期检查目录的内容.过了一会儿,应用程序因为打开文件句柄太多而崩溃.经过一些调试,我发现以下行中的错误:

Files.list(Paths.get(destination)).forEach(path -> {

// To stuff

});

然后我检查了文件列表中的javadoc(我可能应该早些做过)并找到:

*

The returned stream encapsulates a {@link DirectoryStream}.

* If timely disposal of file system resources is required, the

* {@code try}-with-resources construct should be used to ensure that the

* stream's {@link Stream#close close} method is invoked after the stream

* operations are completed

对我来说,“及时处理”仍然听起来资源将最终在应用程序退出之前发布.我查看了JDK(1.8.60)代码,但是我无法找到有关Files.list再次发布打开的文件句柄的任何提示.

然后我创建了一个小应用程序,在使用Files.list后显式调用垃圾收集器,如下所示:

while (true) {

Files.list(Paths.get("/")).forEach(path -> {

System.out.println(path);

});

Thread.sleep(5000);

System.gc();

System.runFinalization();

}

当我使用lsof -p< pid>检查打开的文件句柄时我仍然可以看到“/”的打开文件句柄列表变得越来越长.

我现在的问题是:在这种情况下,是否有任何隐藏机制最终应该关闭不再使用的打开文件句柄?或者这些资源实际上从未被处理过,而且当谈到“及时处理文件系统资源”时,javadoc有点委婉?

今天的文章 java中定义eachDir什么意思_java – 未明确关闭流时Files.list(Path dir)中的...分享到此就结束了,感谢您的阅读。
编程小号
上一篇 2024-12-21 21:46
下一篇 2024-12-21 21:40

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/92284.html