2012-09-20 9 views
8

このarticleを読むと、各Javaアプリケーションが特定のJava仮想マシンインスタンスで実行されることがわかります。したがって、次のコマンド(「Java -jar test1.jar」、「Java -jar test2.jar」)を実行すると、システム内で2つのプロセスが取得され、各コマンドでデフォルトのヒープサイズ(256Mなど)を使用した場合。総メモリコストは、512Mで右 はまた、私は他の質問持っていることです:test1の-jar複数のjavaアプリケーションを実行する際にどのJava仮想マシンが実行するか

  • は、システムで起動し、デーモンプロセスのJava仮想マシンです
  • 私が実行すると、」javaの? .jar "を実行すると、Java仮想マシンのインスタンスが作成され、main関数が実行されます。実行中のすべてのJavaアプリケーションがJava仮想マシンのサブスレッドまたはプロセスであることを意味しますか?
  • Javaアプリケーションは、 ationは、この実行中のJavaアプリケーションから変数、メソッド、定数などを取得できませんか?
  • 実行中のJavaアプリケーションがクラッシュした場合、他の実行中のJavaアプリケーションに影響しますか?

PS:私はグーグル・グーグルで答えをたくさん得ました。私は全く混乱しました。この種の質問やJava仮想マシンの深みを助けてくれる人なら誰でも。例えば、それはどのように動作しますか?

答えて

7

JVMは他のどのような標準プロセスでもあります。したがって、両者間の暗黙の通信や状態共有はありません。それぞれは独自のヒープ、スレッドなどを持っています。もしあなたが1つを殺すと、それは他に影響しません。

は、JVM自体のコードページです。カーネルは、同じバイナリ(バイナリの、つまりJVMだけではない)を2回実行してイメージを再利用するのに十分なインテリジェントです。これは実際のバイナリコードにのみ適用され、その状態は適用されません。詳細は、hereを参照してください。 Linux。

JVMはデーモンプロセスではありませんが、システム起動時にWindowsサービスまたはUnix/Linuxプロセスとして起動できます(/etc/init.dスクリプト経由)。これは、マシンの起動時にJavaで書かれたWebサービスを実行する(言う)方法です。

+1

矛盾しないが明確にする。コード(バイナリ)メモリページの再利用はOS機能であり、Java機能ではありません。 – SJuan76

+0

@ SJuan76 - 説明が追加されました。 Thx –

+0

@BrianAgnewここで私の別の質問は、私が知る限り、実行中のJavaアプリケーションはそれぞれ個別であり、それぞれに独自のメモリ使用量があります。しかし、 "-Xmsと-Xmx"オプションを使ってヒープサイズをどのように管理するのでしょうか?これはJVMメモリー・モデル(http://www.ibm.com/developerworks/aix/library/au-JavaPart2.html)の1つですが、私は読んだけど混乱しています。 – bannie

2

1)いいえ、しかし、Javaアプリケーションをラッパー(Googleでは「Javaサービス」用)としてサービスとして起動する方法があります。

2)はい。

3)プロセス間の通信(v.g. HTTP)を使用できます。しかし、すべてのプロセスがJVMで実行されているため、ショートカットはありません。

4)いいえ

0

For the OS, JVM like an user application. Each JVM Instance is individual.

  1. 号JVMを使用すると、デーモンプロセスとして実行することができますothers.Butとして通常のプロセスです。
  2. はい。 Javaアプリケーションは、OS上のアプリケーションと同じようにJVM上で実行されます。
  3. はい。各JVMスレッドは個別ですが、ネットワーク、RMI、および他のJVMと通信できます。
  4. これは依存しています。通常は個別ですが、JVMがクラッシュした場合はcause the OS crash、その他のJVMが実行されます。
関連する問題