Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 进程.exec()中的JVM内存泄漏_Java_Memory Leaks_Jvm - Fatal编程技术网

Java 进程.exec()中的JVM内存泄漏

Java 进程.exec()中的JVM内存泄漏,java,memory-leaks,jvm,Java,Memory Leaks,Jvm,我的Java应用程序执行大量外部进程。应用程序的内存消耗稳步增长。再现错误的最小示例: import java.io.IOException; public class JSpawnTest { public static void main(String[] args) { while(true) { try { Process p = Runtime.getRuntime().exec("ls"); p.wait

我的Java应用程序执行大量外部进程。应用程序的内存消耗稳步增长。再现错误的最小示例:

import java.io.IOException;
public class JSpawnTest {
    public static void main(String[] args) {
    while(true) {
        try {
            Process p = Runtime.getRuntime().exec("ls");
            p.waitFor();
            p.getOutputStream().close();
            p.getInputStream().close();
            p.getErrorStream().close();
        } catch (InterruptedException | IOException e) {
            e.printStackTrace();
        }
    }
}
每次调用
Process.exec().waitFor()
都会分配64个从未释放的字节。这些分配的内存包含以下模式:

...
00 00 00 00 45 00 00 00  2f 75 73 72 2f 6c 69 62  |....E.../usr/lib|
2f 6a 76 6d 2f 6a 61 76  61 2d 37 2d 6f 70 65 6e  |/jvm/java-7-open|
6a 64 6b 2f 6a 72 65 2f  6c 69 62 2f 61 72 6d 2f  |jdk/jre/lib/arm/|
6a 73 70 61 77 6e 68 65  6c 70 65 72 00 8b 52 39  |jspawnhelper..R9|
00 00 00 00 45 00 00 00  2f 75 73 72 2f 6c 69 62  |....E.../usr/lib|
2f 6a 76 6d 2f 6a 61 76  61 2d 37 2d 6f 70 65 6e  |/jvm/java-7-open|
...
我只在带有JVM的ARM linux机器上观察到错误:

java version "1.7.0_75"
OpenJDK Runtime Environment (IcedTea 2.5.4) (75b13-2.5.4)
OpenJDK Zero VM (build 24.80-b07, mixed mode)
我在x86Linux上也尝试了同样的方法,但问题没有出现

我还没有在JVM bug数据库中找到相关的bug,但我不想责怪JVM,因为我之前所有责怪JVM的尝试都以我的羞愧告终

上面的代码是否有任何不好的地方会导致泄漏,或者是未知/已知的JVM错误?

在openjdk错误跟踪器上简单搜索“waitforleak”,就会发现这可能是已经修复的错误

更新到当前版本。

在openjdk bug跟踪器上简单搜索“waitforleak”,就会发现这可能是已经修复的漏洞

更新到当前版本