资源泄漏是如何发生的



建议始终关闭程序中的流,以防止严重的资源泄漏。但是资源泄漏实际上是如何发生的呢?任何代码示例将不胜感激。谢谢。

考虑一下:

 File[] lotsAndLotsOfFiles = ...
 for (File f: lotsAndLotsOfFiles) {
     InputStream is = new FileInputStream(f);
     // Use `is` ... But don't close it
 }

上述情况发生的情况是,您最终会打开大量文件。在后台,每个打开的文件都有一个关联的文件描述符。例如,在 Linux 上,操作系统只允许进程在任何给定时间具有有限数量的文件描述符。如果进程已用完其文件描述符配额,则进一步尝试打开文件将失败。

在Java级别,垃圾回收器(GC(将完成任何它发现为垃圾的OutputStreamInputStreamReaderWriter。终结器将调用close()这将释放文件描述符。但问题是垃圾回收器只是偶尔运行。因此,如果在连续的 GC 运行之间泄漏了太多文件描述符,您的应用程序将耗尽,并可能死亡。

有许多

防止 Java 资源泄漏的正确方法示例。

相关内容

  • 没有找到相关文章