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