Doesn’t the JVM release all the resources that are not explicitly closed by the programmer on program exit

Tags: ,

I’ve always heard that resources in java must be closed after use or these resources will get exhausted. Is it really a matter of concern for small programs that use very few resources(like 1 or 2 file readers/ buffered readers and all)? Doesn’t the JVM keep track of the resources being used by a program? And wouldn’t it release all those resources once the program exits? If not, why would the JVM keep these resources blocked even after the program exit?


These resources are indeed closed upon a normal JVM exit. However, you may not always know how your method is being called, and it could perhaps be called 2000 times externally by another programmer, and those resources will start to stack up.

In addition, certain non-mainstream OSs may run into the issue that if the JVM were to halt abnormally(via Runtime.getRuntime().halt() or a significant internal error/inconsistency within the JVM) then resources could remain open(due to cleanup code not being run), potentially unusable until rebooted or manually released. Even on mainstream systems sockets could remain open for multiple minutes.

Source: stackoverflow