从java应用程序内部启动外部进程 - 内存考虑

时间:2017-05-31 20:02:22

标签: java jvm

很久以前,由于JVM / OS为JVM可用的新进程分配了相同数量的内存,因此存在一个问题(我认为仅影响* nix操作系统上的Java)并产生来自Java的外部进程。

所以如果你有"大" Java应用程序启动相对较小的进程,您可能会遇到内存问题,因为由于可用于创建此新进程的内存量不足而无法启动进程。

我正在尝试确认此问题是否已在最新版本的Java 7/8中得到解决。

我发现此错误报告被标记为已解决:http://bugs.java.com/view_bug.do?bug_id=5049299 - 任何人都可以确认是否确实已解决此问题,并且从JVM内部启动外部进程现在被视为" safe"?

1 个答案:

答案 0 :(得分:0)

是的,问题已在7u60和8中得到解决。 受影响的bug版本(https://bugs.openjdk.java.net/browse/JDK-5049299)确认了linux,solaris9和solaris10。

但是从bug开始,现在还不清楚从JVM中启动外部进程是否“安全”? Mark的一项评估建议

“在Runtime.exec的现有语义的约束下有 在当前的Solaris发行版中似乎没有任何方法可以避免这种情况。的vfork(2) 不是线程安全的,popen(3C)只提供对其中一个孩子的访问 标准流而不是所有三个。 S10确实支持新的 posix_spawn call;我们应该在S10“

上运行时考虑使用它