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

小编典典

是的,你是对的。

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

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

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

移动或删除可能会失败,因为此时您仍可以打开文件进行读取。

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

在Java

7中,还增加了一个AutoClosable接口,请在此处阅读有关它的更多信息。

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

collection

2020-09-26

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值