在我的Java 8应用程序中,我通过调用:
创建新进程Process applicationProcess = Runtime.getRuntime.exec(executionCommand);
如果在Windows 7 64位+ Java 8 64位(8GB RAM)上执行,我的executionCommand
包含* .exe应用程序路径(基本上是带有* .exe启动程序和预定义-Xmx 4096m的Java应用程序和 - Xms 2048m VM选项)。
调用.exe applicationProcess
会立即创建其他进程“B”并关闭Process applicationProcess
,因此我从Java应用程序内部删除了对“B”进程的任何引用。
当我的应用程序正在运行时,上面的命令调用的进程“B”以某种方式将内存分配限制在~800MB 。 这会使这个过程瘫痪,因此无法正常工作。
如果我关闭我的应用程序(当被调用的进程仍在运行时),突然调用的进程“B”开始根据其预定义的VM选项分配额外的内存并重新获得适当的全部效率。
显然我的应用程序限制了被调用进程“B”的内存分配能力。 为什么会这样,我怎么能绕过这个限制?
注意: 1.为我的java应用程序(invocator)设置更高的-Xmx和-Xms值并不能解决这个问题。