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

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

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

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

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

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

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

更多信息

也可以看看:

  • 在exceptionExit上清理资源 ,也在StackOverflow上
  • 如何在Java中实现优雅终止
  • Java理论与实践:良好的内务管理实践 ,在IBM Developer Series上

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

Java 7中存在显式关闭流的替代方法,称为try-resource“语句”,它相当于在try块之后关闭finally块中的资源。 有关详细信息,请点击此处 。