Java应用程序使用的资源是否在终止时释放?

时间:2012-06-05 23:06:00

标签: java memory-management connection

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

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

2 个答案:

答案 0 :(得分:4)

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

Java 7中存在显式关闭流的替代方法,称为try-resource"语句",这相当于在try块之后关闭finally块中的资源。有关详情,请访问here

答案 1 :(得分:2)

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

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

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

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

更多信息

另见: