使用Runtime.exec()继续循环时,内存使用量不断增加

时间:2017-07-06 14:42:01

标签: memory-leaks java-8 runtime.exec

我有一个应用程序,我使用系统命令定期(每1~2)分钟收集(Linux)系统信息。当我检查我的进程列表(使用 boolean done = false; //Process p = null; while (!done) { Process p; try { p = Runtime.getRuntime().exec("ls /tmp"); p.waitFor(); System.out.println("Done"); // closing the opened filedescriptors/anything // p.destroy() // not helpful even // then used the below,, still the same p.getInputStream().close(); p.getOutputStream().close(); p.getErrorStream().close(); } catch (IOException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } } )时,内存使用百分比不断增加。当程序启动时,使用的百分比为0.5%,而在我检查的第二天,在具有8GB RAM的服务器中为1.4%。我能理解它是不正常的。

为了说明这种行为,我创建了具有最快循环时间的以下代码段,并且只创建了涉及的代码片段。当我运行时,我可以看到内存使用百分比上升非常快(在不到15分钟内0.5%到1.0%)

.container{
  border:1px solid;
  width: 70%;
  display: table;
  table-layout: fixed;
}

.el {
  border: 1px solid red;
  min-width: auto;
  display: table-cell;
}

是内存泄漏还是其他什么?我在这里错过了什么吗请指导我们。

0 个答案:

没有答案