2017-05-31 133 views
0

很久以前,由於JVM/OS分配相同數量的事實,很久以前出現了一個問題(我相信隻影響* nix操作系統上的Java) JVM可用的新進程內存。從java應用程序啓動外部進程 - 內存考慮

所以如果你有一個「大」的Java應用程序啓動相對較小的進程,你可能會遇到內存問題,因爲由於創建這個新進程的可用內存不足而無法啓動進程。

我試圖確認此問題是否已在最新版本的Java 7/8中得到解決。

我發現這個bug報告被標記爲已解決:http://bugs.java.com/view_bug.do?bug_id=5049299 - 任何人都可以確認是否確實已解決此問題,並且從JVM內部啓動外部進程現在被認爲是「安全的」?

+0

在評估部分,據說只有Solaris受此影響,Linux被明確提及爲未受影響。 – Holger

+0

互聯網上有一些頁面表明Linux也受到影響(至少有一些版本):https://confluence.atlassian.com/bitbucketserverkb/forking-jvm-error-12-cannot-allocate-memory-or-錯誤-12-不夠空間-779171744.html所以我想確保... –

回答

0

是的,問題在7u60和8解決。 受影響的版本的bug(https://bugs.openjdk.java.net/browse/JDK-5049299)確認linux,solaris9和solaris10。

但是從bug中我們不清楚從JVM中啓動外部進程現在被認爲是「安全的」嗎? 馬克評價的一個建議

「內的Runtime.exec現有語義的制約也有不 似乎是沒有辦法避免這種情況在當前的Solaris版本。的vfork(2) 不thread-安全和popen(3C)只能訪問兒童的標準流 而不是全部三個標準流S10確實支持新的 posix_spawn調用;我們應該考慮在S10上運行時使用它「