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() 来把句柄数释放。