Are resources used by a Java application freed when it terminates?

送分小仙女□ 提交于 2019-12-31 02:40:27

问题


Java applications may use IO streams, sockets or database connections that should be closed when they are no longer needed.

However, applications may be terminated (e.g. by killing the process). Will all used resources be freed in this case? Who will free them: OS or JRE?


回答1:


If your software doesn't take care of resource management properly, the following will happen:

  • at runtime: the JVM will attempt during the duration of your program to close open streams if they're are seemingly unused (during garbage collection cycles),
  • at your program's termination point: the JVM should close open streams of all kinds left open by your program,
  • at the JVM's process termination point: the operating system will take care of releasing anything that hasn't been properly released by the JVM when it exists (hopefully, or this OS has some serious issues...).

As mentioned by Vulcan, none of this ensures that they are properly dealt with on the other end, obviously.

Note that the 3rd bullet point is a rather generic thing: most operating systems will take care of this, and it doesn't relate to the Java Platform's internals. It's about the OS managing its processes and resources on its own.

More Info

See also:

  • Cleanup of resources on an abnormal Exit, also on StackOverflow
  • How do I implement graceful termination in Java
  • Java Theory and Practice: Good Housekeeping Practices, at the IBM Developer Series



回答2:


The JVM will release all active resources upon termination; however, this does not ensure that the other end will free the resource too, so explicitly closing resources is in every programmer's best interest.

An alternative to explicitly closing streams exists in Java 7, called the try-resource "statement", which is the equivalent of closing a resource in a finally block after a try block. More info on that can be found here.



来源:https://stackoverflow.com/questions/10906226/are-resources-used-by-a-java-application-freed-when-it-terminates

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!