码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2021-05-24 13:19:07      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:代码   句柄   exce   无语   应该   except   int   close   RoCE   

感觉好久没写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() 来把句柄数释放。

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

标签:代码   句柄   exce   无语   应该   except   int   close   RoCE   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!