14

JVM が同時に複数のプログラムを実行することは可能ですか? もしそうなら、どのように?そうでない場合、なぜですか?

プログラムを実行するには、単に

java ProgramName

しかし、同じ JVM インスタンスを使用して別のプログラムを実行できますか?

4

6 に答える 6

13

答えは、「プログラム」の定義によって異なります。mainリソースまたは名前空間の組み込みの分離がないため、メソッドを持ち、開始する Java プログラムはjava NameOfClass通常、同じ JVM で実行できません。たとえば、2 つのプログラムが同じライブラリの競合するバージョンを使用している場合はどうなるでしょうか。

また、エンタープライズ アプリケーションなど、JVM を共有するように設計されたアプリケーションもあります。これらは、基本的に他のプログラムを実行するためのプログラムである「アプリケーションサーバー」のコンテキストで実行するように設計されたプログラムです。アプリケーション サーバーは、クラスローダーとセキュリティ マネージャーを使用してアプリケーション リソースを分離します。たとえば、2 つのアプリケーションが競合するバージョンのライブラリまたは競合するクラス名を使用している場合でも、異なるクラスローダーを介してロードされるため、JVM を共有している場合があります。

于 2013-04-25T17:11:11.487 に答える
3

コマンド プロンプトから JAVA コマンドを実行する場合、常に別の JVM インスタンスで実行されます。同じ JVM を使用する場合は、プログラムに別のスレッドを使用できます。ただし、JAVA コマンドを使用すると、2 つの別個のプロセスになるため、別個の JVM になります。

于 2013-04-25T17:18:51.327 に答える
2

IBM は「マルチテナント」JVM http://www.ibm.com/developerworks/library/j-multitenant-java/を開発しています。これにより、同じ仮想マシン内で複数の Java プログラムを実行することが可能/簡単になります。

于 2013-11-05T15:38:17.790 に答える
0

コマンドを実行javaするには、使用する必要があります

java [ options ] class [ argument ... ]
java [ options ] -jar file.jar [ argument ... ]

またjava、Javaアプリケーションランチャーからもそれを読み取ることができます

Javaツールは、Java アプリケーションを起動します。これは、Java ランタイム環境を開始し、指定されたクラスをロードし、そのクラスのメインメソッドを呼び出すことによって行われます。

したがって、 1 つのクラスをロードしてそのメインメソッドを呼び出すjavaJVM のプロセスを作成します。

javaコマンドを介してメインメソッドを実行するために他のクラスを追加するオプションはありません。必要に応じて、プログラム内で新しいスレッド/プロセスを開始できますが、JVM が開始時にメインメソッドを 1 つしか実行しないという事実は変わりません。

于 2013-04-25T17:20:13.747 に答える