ProcessBuilder/Runtime.exec() が JVM のメモリ スペース内で実行されるのか、それとも完全に別のシステム メモリを使用して出力を Java に送信するのかを誰かが確実に知っているかどうか疑問に思っていました。この件に関するドキュメントは見つかりませんでした。
セキュリティの問題と出力を読み取ることができるため、前者だと思いますが、絶対に確認したいと思います。
ProcessBuilder/Runtime.exec() が JVM のメモリ スペース内で実行されるのか、それとも完全に別のシステム メモリを使用して出力を Java に送信するのかを誰かが確実に知っているかどうか疑問に思っていました。この件に関するドキュメントは見つかりませんでした。
セキュリティの問題と出力を読み取ることができるため、前者だと思いますが、絶対に確認したいと思います。
新しいプロセスは、それを開始したJavaプロセスの外部で実行されます。新しいプロセスへのメモリの割り当ては、プロセス管理の一部としてオペレーティングシステムによって管理されます。
新しいプロセスを開始して通信するためのインターフェースを提供するJavaクラスProcessBuilder
は、Javaプロセス内で実行されます。
execが新しいプロセス、またはオペレーティングシステムの用語に精通していない人のためのプログラムを起動することはかなり明らかなようです。そのため、入出力機能、環境を設定する機能、および外部プログラムが戻るのを待つ機能があります。
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).
Java SEの並行性リファレンスから、次のように言われています。
プロセスには、自己完結型の実行環境があります。プロセスには通常、基本的なランタイムリソースの完全なプライベートセットがあります。特に、各プロセスには独自のメモリスペースがあります。
内部に興味がある場合は、openJDKのUNIXProcessクラスを確認してください。