3

(間違っていたら訂正してください)

java コマンドを発行して Java プログラムを実行すると、

java MyProg

プログラムは新しい JVM で実行されます。

  • プログラムを新しい JVM にロードするのは何ですか? 新しいスレッドを生成するのは JRE ですか?

  • 各プログラムが独自の JVM で実行される場合、相互に通信することは可能ですか?

  • 以前、JMX を使用してローカルで実行されている Java プログラムにリクエストを送信する方法について質問しました。JMX コマンドがローカルで発行されている場合、ポート番号は必要ないことがわかりました。その答えは、クライアント アプリケーション (jconsole、jvisualvm、jprobe など) がマシン上で実行されている Java アプリケーションを検索することでした。これは問題ありませんが、クライアント アプリケーションが監視または通信するアプリケーションとは別の JVM で実行されることを考えると、ポート番号なしで (同じ JVM で実行されていないため) どのように正確に相互にやり取りするのでしょうか?

  • 2 つのプログラムが実行されている場合、通常は 2 つの JVM があります。JVM は同じ JRE プロセス内で実行されますか? また、これは 2 つの JVM が通信できる必要があることを意味するのではないでしょうか?

ありがとう

4

3 に答える 3

6
  • プログラム(より具体的にはコンパイルされたクラス)は、システムクラスローダーと呼ばれるJVMのコンポーネントによってロードされます。(クラスローダーの詳細については、こちらをご覧ください)。JVMは、ネイティブコードライブラリ(ブートストラップクラスローダーによってロードされる)を使用して、新しいスレッドを生成します。
  • ソケット、RPC、およびその他のIPCメカニズム(通常はネイティブライブラリを使用してアクセス)を使用して通信できます。
  • 正確な答えはわかりませんが、標準のポートが必要です。
  • JVMのさまざまなインスタンスは、別々のプロセスです。それらはメモリ内で何も共有しません。(ただし、同じシステムで実行している場合は、同じJREインストールのライブラリと構成ファイルを共有する可能性があります。これは、Firefox、Emacs、または他のアプリケーションの2つのインスタンスを同じシステムで実行する場合と同じです)。
于 2010-11-02T12:59:39.063 に答える
2

さまざまなjvmのプログラムが通信する方法はいくつかあります。

  1. ObjectInputStream、ObjectOutputStream

  2. RMI

  3. ソケット

于 2010-11-02T12:59:29.960 に答える
2

舞台裏で起こっている特別な魔法はありません。javaJVMを実装するプログラムです。2つの異なるプログラム(たとえば、2つの異なるシェル)で同時に実行するjavaと、2つのプロセスが独自のJVMを実行します。彼らはあなたの好きなIPCやネットワークプロトコルを介して通信するかもしれません。

于 2010-11-02T13:01:13.340 に答える