3

Java 应用程序可能使用在不再需要时应关闭的 IO 流、套接字或数据库连接。

然而,应用程序可能会被终止(例如通过终止进程)。在这种情况下是否会释放所有使用的资源?谁将释放它们:OS 还是 JRE?

4

2 回答 2

5

JVM 将在终止时释放所有活动资源;但是,这并不能确保另一端也会释放资源,因此明确关闭资源符合每个程序员的最大利益。

Java 7 中存在一种显式关闭流的替代方法,称为 try-resource “语句”,相当于在finallytry 块之后关闭块中的资源。更多信息可以在这里找到。

于 2012-06-05T23:13:11.873 回答
3

如果您的软件没有正确处理资源管理,则会发生以下情况:

  • 在运行时: JVM 将在您的程序运行期间尝试关闭打开的流,如果它们看似未使用(在垃圾收集周期期间),
  • 在您的程序的终止点: JVM 应该关闭您的程序打开的所有类型的打开流,
  • 在 JVM 的进程终止点:操作系统将负责释放 JVM 未正确释放的任何内容(希望如此,或者这个操作系统有一些严重的问题......)。

正如 Vulcan 所提到的,显然,这些都不能确保它们在另一端得到妥善处理。

请注意,第 3 个要点是相当通用的事情:大多数操作系统都会处理这个问题,它与 Java 平台的内部结构无关。它是关于操作系统自己管理其进程和资源的。

更多信息

也可以看看:

于 2012-06-06T00:47:05.470 回答