Java执行Linux命令导致内存泄漏

问题解决了,从JDK1.7升级到JDK8就好了。这个是JDK自己的bug,可以查JDK的buglist

执行下面的代码会导致内存泄漏,实在不知道为啥了,求助
if(SystemUtils.IS_OS_LINUX){
Process process = Runtime.getRuntime().exec(cmd);
InputStream is = process.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
StringBuilder buf = new StringBuilder();
try {

String line;
while ((line = br.readLine()) != null) {
buf.append(line).append("\n");
}
if (process.waitFor() != 0) {
return "CMD1 Error";
}
return buf.toString();
} catch (java.io.IOException e) {
e.printStackTrace();
return "CMD1 Error";
} finally{
is.close();
isr.close();
br.close();
process.destroy();
}
}

3个回答

同问~是不是流的关闭顺序引起的啊,先关闭br,然后isr,is,process

这个是JDK 7的bug,在JDK 8已经修复了,有类似错误的同学把jdk升级一下

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问