栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

将流类或连接视为Java中的资源泄漏

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

将流类或连接视为Java中的资源泄漏

是的,你是对的。

垃圾回收会释放Java堆(内存),但是close()会释放用于打开文件的OS资源(在大多数系统上打开文件的数量受到限制),并确保真正写入数据。

但是许多类(例如

FileInputStream
和)
RandomAccessFile
都使用finalize()方法编写,该方法可以确保如果垃圾中的实例被调用,则将首先调用close()。因此,在许多情况下,垃圾回收确实会间接释放文件,并且程序员经常可能会懒于关闭资源,因为垃圾回收通常会为您清理文件。不幸。

问题在于您无法控制何时发生,而且可能根本不会发生。因此,如果打开的文件太多,则操作系统可能会在垃圾收集器关闭它们之前给您一个有关此错误的信息。或者,如果您要移动或删除文件,请在读取文件后立即进行-
移动或删除可能会失败,因为此时您仍可以打开文件进行读取。

这样的错误通常很难可靠地重现,因为它们取决于垃圾收集器的时间。因此,您得到的东西通常可以正常工作,但有时会失败。非常烦人的调试。出于这个原因,强烈建议确保在完成操作后立即关闭您可能正在使用的任何流/读取器/连接或其他可关闭资源。最好在finally块中,以确保即使在处理过程中发生其他错误也能确保它发生。

在Java
7中,还增加了一个

AutoClosable
接口,请在此处阅读有关它的更多信息。

参考:http : //www.preranch.com/t/278165//java/InputStream-close-garbage-
collection



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/573856.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号