关闭资源是否始终很重要?

2022-09-03 04:58:33

很多时候,我遇到这样的语句,即应用程序应始终显式关闭它打开的所有资源。

我的编程方法相当务实,我不喜欢盲目地遵循任何我没有清楚地看到好处的惯例。因此,我的问题。

让我们假设:

  1. 我有一个小应用程序
  2. 它打开一些资源(例如文件,数据库连接,远程流)并对其进行处理
  3. 它工作了几分钟,然后退出
  4. 假设它是在Java中(如果语言相关)

我真的需要关心关闭我打开的所有资源吗?我想当应用程序/虚拟机退出时,我打开的所有资源都将关闭/释放。我说的对吗?

如果这是真的,是否有任何令人信服的理由来关心在如此小,短工作的应用程序中关闭资源?

更新:

这个问题纯粹是假设的,但是不关心这个问题的论点是,我可能只是在一些快速脚本中拼凑起来,不想编写任何与手头问题没有直接关系的不必要的代码:关闭资源,做所有这些冗长的尝试-捕获-最终的事情,处理我不关心的异常等等。

问题的要点是不这样做是否有任何实际后果。


答案 1

我想当应用程序/虚拟机退出时,我打开的所有资源都将关闭/释放。

一个没有被重新释放的资源会发生什么是你无法控制的。它可能没有害处,也可能有一些害处。它也高度依赖于平台,因此仅对一个平台进行测试将无济于事。

我为什么要关心在如此小、短工作的应用程序关闭这些资源?

应用程序的大小应该无关紧要。首先,应用程序通常会增长;其次,如果你不练习以正确的方式去做,你就不会知道在关键的时候该怎么做。


答案 2

如果不关闭资源,则可能导致应用程序服务器在发生资源耗尽时频繁重新启动。因为操作系统和服务器应用程序通常具有资源的上限

根据文档

典型的 Java 应用程序操作多种类型的资源,如文件、流、套接字和数据库连接。必须非常谨慎地处理此类资源,因为它们会为其操作获取系统资源。因此,您需要确保即使在出现错误的情况下也可以释放它们。

实际上,不正确的资源管理是生产应用程序中故障的常见原因,通常的陷阱是数据库连接和文件描述符在代码中的其他位置发生异常后保持打开状态。这导致应用程序服务器在发生资源耗尽时频繁重新启动,因为操作系统和服务器应用程序通常具有资源上限。

试用资源在java 7中为讨厌关闭语句的程序员引入的语句。