被它终止时释放的Java应用程序所使用的资源?(Are resources used by a Ja

2019-06-25 09:09发布

Java应用程序可以使用IO流套接字或不再需要时,他们应该被关闭数据库连接。

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

Answer 1:

如果您的软件不照顾资源管理不当,会发生以下情况:

  • 在运行时:JVM将你的程序的持续时间内尝试关闭打开的流,如果他们看似未使用(在垃圾收集周期),
  • 在你的程序的终止点:JVM应该由你的程序关闭左开各种开流,
  • 在JVM的进程终止点:操作系统会照顾释放任何已不是由JVM正确释放时存在(希望,或该操作系统有一些严重的问题......)的。

正如火神提到的,没有这保证了他们妥善处理与在另一端,很明显。

需要注意的是第三个项目符号点是一个比较通用的东西:大多数操作系统都将照顾这,它不涉及到Java平台的内部。 这是关于OS中管理自身的流程和资源。

更多信息

也可以看看:

  • 资源上的异常退出清理 ,也StackOverflow上
  • 如何在Java中实现正常终止
  • Java理论与实践:整理好 ,在IBM开发者系列


Answer 2:

JVM将释放终止时所有活动的资源; 然而,这并不能确保的另一端将释放的资源太多,所以显式关闭资源是每个程序员的最佳利益。

另一种明确关闭流在Java 7中存在,叫做试资源“声明”,这是在关闭资源相当于finally try块后阻塞。 对更多信息,可以发现在这里 。



文章来源: Are resources used by a Java application freed when it terminates?