いくつかの背景について、私の知る限り、Java アプリケーションを開始すると、JVM はアプリケーションにヒープ領域とスタックを割り当てます。このヒープは、アプリケーションによって作成されたすべてのオブジェクトを格納するために使用されます。
私の質問は、Java コードからシェル スクリプトを呼び出すと、スクリプトによって使用されるメモリが JVM ヒープ領域から割り当てられるか、システム メモリ領域が使用されるかということです。
いくつかの背景について、私の知る限り、Java アプリケーションを開始すると、JVM はアプリケーションにヒープ領域とスタックを割り当てます。このヒープは、アプリケーションによって作成されたすべてのオブジェクトを格納するために使用されます。
私の質問は、Java コードからシェル スクリプトを呼び出すと、スクリプトによって使用されるメモリが JVM ヒープ領域から割り当てられるか、システム メモリ領域が使用されるかということです。
システムメモリが使用されます。
Java は、子 (実行しようとしているコマンド) を実行できるようにfork()
、親メモリ (現在使用中の JVM メモリ) を複製するシステム コールを呼び出します。
一般に、プロセスを実行するときは、最初に を実行し、fork()
次にを実行する必要がありますexec()
。フォークは、現在のプロセスを複製して子プロセスを作成します。次に、呼び出しexec()
て「プロセス イメージ」を新しい「プロセス イメージ」に変更し、基本的に子プロセス内で別のコードを実行します。これは、他のプログラム/スクリプトを実行するための新しいプロセスを作成する方法です。
見る: