フォークを使用しないJavaRuntime.exec()の代替を見つけようとしています。JVMがメモリの大部分を消費し、そのプロセスでRuntime.execフォークがメモリの問題を引き起こす可能性があるという問題は、コピーオンライトとオーバーコミット(stackoverflowでよく説明されています。JavaRuntime.getRuntime()。execを参照)でも発生する可能性があります。 ()代替)。
別のstackoverflowの投稿で、JNAを使用して解決策が提案されましたが、この解決策についてのコメントはなく、高く評価されていませんでした:Runtime#exec(を呼び出して「java.io.IOException:error = 12、メモリを割り当てることができません」を解決する方法)?
同様に、同様のJNAソリューションがここで提案されました:http ://sanjitmohanty.wordpress.com/2011/12/20/overcoming-runtime-exec-havoc-with-jna/
私の質問は、JNAを使用してシステムコールを行うことでフォークが防止され、フォークが引き起こす可能性のある後続のメモリ割り当ての問題が回避されるかどうかです。これが私が使用しているコードです:
public class TestJNA {
private interface CLibrary extends Library {
CLibrary INSTANCE = (CLibrary) Native.loadLibrary("c", CLibrary.class);
int system(String cmd);
}
private static int exec(String command) {
return CLibrary.INSTANCE.system(command);
}
public static void main(String[] args) {
exec("ls");
}