我想知道如果流没有手动关闭,它什么时候关闭。我的意思是,如果流的引用范围不再存在,流是否会被关闭?
考虑以下示例场景。
Class A{
InputStream in;
OutputStream out;
A(){
// Initialize and create the streams.
}
...
}
Class B{
public void myMethod(){
A a = new A();
System.out.println("End of my method.")
}
...
}
在这里,一旦我完成了流,我将退出 myMethod()
但反过来该过程的程序不会终止并继续进行其他操作。
我没有关闭流。一旦对A类的引用范围结束,它会自动关闭吗? (即 myMethod()
何时结束)? GC 会处理这个吗?另外,我读到一旦进程结束,流就会关闭,系统会释放为它保留的所有资源,供其他进程使用。我们如何检查流是否打开?是否有来自 Java 的任何 linux 命令或选项来检查?
感谢任何帮助!
最佳答案
我认为 JVM 规范对此没有任何保证。您真的应该最终
关闭这些资源。
当进程结束时,操作系统将释放与其关联的所有资源(包括内存、文件句柄和网络套接字)。
有一些操作系统工具可以检查打开的文件和流,例如 lsof
.
关于java - 如果流没有手动关闭,什么时候关闭?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33275797/