如果不手动关闭流,何时关闭?
我想知道如果不手动关闭流,何时关闭。我的意思是,如果引用的范围不再存在,流将被关闭吗?
请考虑以下示例方案。
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规范对此不做任何保证。您确实应该finally
关闭这些资源。
该过程结束时,操作系统将释放与其相关的所有资源(包括内存,文件句柄和网络套接字)。
有OS设施可以检查打开的文件和流,例如lsof
。
以上是 如果不手动关闭流,何时关闭? 的全部内容, 来源链接: utcz.com/qa/398399.html