ProcessBuilder.start 和 Runtime.exec 似乎在 *NIX 系统上使用 fork() ,这似乎为子进程分配了与父进程相同的内存量(参见例如 这个问题)。如果您想从使用大量内存的进程中启动几乎不需要内存的进程,这可能会很痛苦。
有没有办法使用 POSIX_SPAWN 启动进程——它不进行内存分配?我知道的唯一方法是使用Tanuki,但结果对我来说并不理想。
这是一个实现 posix_spawn 的开源项目
使用NuProcess库。它在 Linux 上使用 VFORK,不会先复制进程空间,从而消除了在从具有大堆的 java 进程中派生进程时频繁出现的 OOM 错误。