Я пытаюсь найти альтернативу Java Runtime.exec(), которая не использует вилку. Проблема в том, что наша JVM потребляет большую часть памяти, и вилка Runtime.exec в этом процессе может вызвать проблемы с памятью, даже с копированием при записи и перегрузкой (что часто обсуждалось в stackoverflow, см. Java Runtime.getRuntime().exec() альтернативы).
В другом сообщении stackoverflow было предложено решение с использованием JNA, однако комментариев к этому решению не было, и оно не получило высокой оценки: Как решить java.io.IOException: error=12, невозможно выделить память, вызывая Runtime#exec()?
Аналогичное решение 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");
}