JVM が同時に複数のプログラムを実行することは可能ですか? もしそうなら、どのように?そうでない場合、なぜですか?
プログラムを実行するには、単に
java ProgramName
しかし、同じ JVM インスタンスを使用して別のプログラムを実行できますか?
答えは、「プログラム」の定義によって異なります。main
リソースまたは名前空間の組み込みの分離がないため、メソッドを持ち、開始する Java プログラムはjava NameOfClass
通常、同じ JVM で実行できません。たとえば、2 つのプログラムが同じライブラリの競合するバージョンを使用している場合はどうなるでしょうか。
また、エンタープライズ アプリケーションなど、JVM を共有するように設計されたアプリケーションもあります。これらは、基本的に他のプログラムを実行するためのプログラムである「アプリケーションサーバー」のコンテキストで実行するように設計されたプログラムです。アプリケーション サーバーは、クラスローダーとセキュリティ マネージャーを使用してアプリケーション リソースを分離します。たとえば、2 つのアプリケーションが競合するバージョンのライブラリまたは競合するクラス名を使用している場合でも、異なるクラスローダーを介してロードされるため、JVM を共有している場合があります。
コマンド プロンプトから JAVA コマンドを実行する場合、常に別の JVM インスタンスで実行されます。同じ JVM を使用する場合は、プログラムに別のスレッドを使用できます。ただし、JAVA コマンドを使用すると、2 つの別個のプロセスになるため、別個の JVM になります。
IBM は「マルチテナント」JVM http://www.ibm.com/developerworks/library/j-multitenant-java/を開発しています。これにより、同じ仮想マシン内で複数の Java プログラムを実行することが可能/簡単になります。
コマンドを実行java
するには、使用する必要があります
java [ options ] class [ argument ... ]
java [ options ] -jar file.jar [ argument ... ]
またjava
、Javaアプリケーションランチャーからもそれを読み取ることができます
Javaツールは、Java アプリケーションを起動します。これは、Java ランタイム環境を開始し、指定されたクラスをロードし、そのクラスのメインメソッドを呼び出すことによって行われます。
したがって、 1 つのクラスをロードしてそのメインメソッドを呼び出すjava
JVM のプロセスを作成します。
java
コマンドを介してメインメソッドを実行するために他のクラスを追加するオプションはありません。必要に応じて、プログラム内で新しいスレッド/プロセスを開始できますが、JVM が開始時にメインメソッドを 1 つしか実行しないという事実は変わりません。