2012-06-04 3 views
1

Мне было интересно, знает ли кто-нибудь с уверенностью, работает ли ProcessBuilder/Runtime.exec() внутри пространства памяти JVM или использует ли она полностью отдельную системную память и как-то отправляет вывод на Java. Я не мог найти документацию по этому вопросу.Память Java ProcessBuilder

Я предполагаю, что это первый из-за проблем с безопасностью и возможность считывания вывода, но я хотел бы сделать абсолютно уверенным.

ответ

5

Новый процесс запускается за пределами процесса Java, который его начал. Распределение памяти на новый процесс управляется операционной системой, как часть process management.

Класс Java ProcessBuilder, который предоставляет интерфейс для запуска и связи с новым процессом, выполняется внутри процесса Java.

+0

Got it. Спасибо за краткий ответ! – kevin948

0

Понятно, что exec запускает новый процесс или программу для тех, кто не разбирается в терминологии операционной системы. Вот почему он имеет входные возможности вывода, возможность настройки среды и возможность ждать возврата внешней программы.

The first line of the javadoc says it all.

Executes the specified string command in a separate process. 

The command argument is parsed into tokens and then executed as a command in a 
separate process. The token parsing is done by a StringTokenizer created by the 
call: 

    new StringTokenizer(command) 


with no further modifications of the character categories. This method has exactly 
the same effect as exec(command, null). 
0

Из concurrency ссылки на Java SE, говорится, что:

Процесс имеет самодостаточную среду выполнения. Процесс обычно имеет полный, частный набор базовых ресурсов времени выполнения; в , каждый процесс имеет собственное пространство памяти.

Если вас интересуют внутренние элементы, ознакомьтесь с классом UNIXProcess из openJDK.

Смежные вопросы