Runtime.getRuntime().exec() 句柄数不断增加,需要关闭好几个地方

感觉好久没写java代码了,今天需要使用 Runtime.getRuntime().exec()

在完成代码后,测试的时候,发现每一次的 exec() 后,进程的句柄数都会增加 4个,百度了一下找到原因:

Process p = Runtime.getRuntime().exec("...");

后,没有在 finally 中显示的调用:

try
{
    p.getInputStream().close();
    p.getOutputStream().close();                             
    p.getErrorStream().close();
}
catch (IOException e)
{
    e.printStackTrace();
}

在 finally 中加了上面这段代码后,再次运行,发现进程的句柄数都会增加 1个

找了好久,没找到是什么原因引起句柄数增加 1个。

我突然想起了什么,在最后加了一句:Runtime.getRuntime().gc();

再次运行,进程的句柄数不再增加 1。

哎呦我去,这这这...我无语了

看这个样子,我猜测:如果我不显示的调用 Runtime.getRuntime().gc();,未来 java 应该也会在某一时刻自动 gc() 来把句柄数释放。

原文地址:https://www.cnblogs.com/personnel/p/14775029.html