假设我使用以下代码段通过java调用命令行程序
p = Runtime.getRuntime().exec(command);
p.waitFor();
在这种情况下,command
调用的程序exec
将分配多少内存?是否与为jvm
分配的内存有关?
如果是这样,我该如何克服这个限制?
更新
根据对这个问题的答复,How to solve "java.io.IOException: error=12, Cannot allocate memory" calling Runtime#exec()?
Runtime.getRuntime()。exec以相同的金额分配进程 以记忆为主。如果您将堆设置为1GB并尝试执行 然后它将为该进程分配另外1GB来运行。
那么有什么方法可以为我使用java调用的进程提供更多内存?
如果我通过这样的命令提示符运行命令怎么办?
rt.exec("cmd.exe /c command");
在这种情况下,谁来决定内存限制?命令提示符还是Java?
答案 0 :(得分:1)
javadoc for Runtime.exec表示命令将在单独的进程中启动。因此,命令本身将在其自己的进程中运行,并且不使用任何JVM内存。
然而,当然该方法也返回一个Process
对象,它本身将使用一些JVM内存,但这只是一些变量来跟踪启动的进程,所以除非你并行启动成千上万的进程,这应该不是问题。