私は、単一のマシンで複数のJavaプログラムを実行すると、複数のインスタンスが作成される理由を教えていただけますか?なぜすべてのプログラムが単一のjvmを共有できないのですか?また、javaライブラリはすべてのjvmインスタンスに個別にロードされますか?なぜ複数のjvmインスタンスが作成されるのですか?
答えて
JVMを強制終了すると、すべてのJavaプログラムをクラッシュさせたくないからです。 はい、Javaライブラリは別途ロードされます。しかし、Javaプログラムは、どのライブラリを "import"キーワードでロードするかをJVMに指示します。
つまり、2つのjvmが同じクラスをメモリにロードしている場合、そのクラスオブジェクトにアクセスする際に競合が発生する可能性があるため、jvmはメモリ内の共通ライブラリをどのようにロードするのですか? –
理論上、1つのjvmは複数のJavaアプリケーションのホストになることができますが、実際には多くの干渉があります。ドキュメントに基づい
:
JVMはSystem.in/out/errの一組、そうでつのデフォルトエンコーディング一のデフォルトロケール、システムプロパティの一組、およびを有しています。 1つのアプリケーションがこれらを変更すると、すべてのアプリケーションに影響します。 System.exit()を呼び出すアプリケーションは、すべてのアプリケーションを強制終了します。 1つのアプリケーションスレッドがワイルドになり、あまりに多くのCPUまたはメモリを消費すると、他のアプリケーションにも影響します。
複数のインスタンスが作成されます。なぜ我々は、単一のマシンで複数のJavaプログラムを実行する場合、誰が私に教えていただけますか?
任意のプログラムを複数回実行すると、そのプログラムの複数のインスタンスが作成されます。これはJava独自のものではありません。
すべてのプログラムが単一のJVMを共有することはできませんなぜ
あなたのプログラムは、単一のJVMを共有しなければならない、しかし、これはあなたが唯一のJVMを起動し、実行するアプリケーションにそれを伝えるべきであることを意味します。あなたがこれをしたいのかどうかは別の質問です。アプリケーションを共有すると複雑さが増し、実際には単一のモノリスを複数のマイクロサービスに変える傾向があります。
JVMを結合するのではなく、分割する理由はいくつかあります。
- 標準のガベージコレクタの休止時間は、使用されるヒープのサイズとともに増加します。アプリケーションを分割することは、より多くの小さな休止を意味します。
- 簡単な作業負荷のためにガベージコレクションをチューニングする方が簡単です。仕事量が混在している場合は、大きな幼い宇宙ともう1つの小さな宇宙が必要です。作業量が多ければ多いほど、JVMを調整するのが難しくなります。
- アプリケーションでリソースリークが発生した場合は、これを解決する唯一の方法はJVMを再起動することです。各アプリケーションが独自のJVMに含まれている場合は、他のアプリケーションを停止する必要はありません。
- JVMを停止する(メモリをいっぱいにする、JVMをクラッシュする、または使用不可能な状態にする)コードがある可能性があります。複数のJVMがこのような障害の影響を制限します。
- は、メンテナンス性を向上させる主要コンポーネント間の明確な分離を強制します。これはモノリスで行うことができますが、弟子が必要です。
そして、javaライブラリはすべてのjvmインスタンスに別々にロードされますか?
JVMメモリは、JARをメモリにマップします.JVMは、JVMではなくOSであり、プロセス間でJARを共有するかどうかを決定します。
しかし、クラスを必要とする各JVMはそれをロードし、静的フィールドのコピーを設定します。私は、メモリのJVMの負荷の共通ライブラリをどうするかと言うことを意味
メモリ内の2つのJVMの負荷同じクラスならば、競合があるかもしれませんので、そのクラスのオブジェクトに
にアクセスしながら各プロセスは、それが自分のメモリ空間のしています。 2つのJVMが同じクラスをロードする場合、これらの2つのコピーは互いに相互作用しないため、競合する機会はありません。
簡単な説明に感謝します。 –
- 1. goutte httpリクエストで複数のインスタンスが作成されない
- 2. Windows版Geditで複数のインスタンスが作成される
- 3. クラスのインスタンスを複数作成できないのはなぜですか?
- 4. 角度サービスオブジェクトの複数のインスタンスが作成される
- 5. Camelのデフォルトプロデューサの複数のインスタンスが作成されました
- 6. gcloud複数のVMインスタンスが作成されました
- 7. Azureで新しいVMインスタンスを作成中にD1V2インスタンスが表示されないのはなぜですか?
- 8. FlexでTextAreaのサブクラスを作成すると 'textField'がインスタンス化されないのはなぜですか?
- 9. なぜphpmyadminでテーブルが作成されないのですか
- 10. スレッドを作成するクラスのインスタンスを複数インスタンス化する...?
- 11. Sassキャッシュフォルダが作成されるのはなぜですか
- 12. react-reduxが複数の状態を作成するのはなぜですか?
- 13. 複数のチェックボックスのインスタンスが1つしかないのはなぜですか?
- 14. PhantomJSのインスタンスを複数作成するか、1つだけ作成するか?
- 15. リンクが作成されないのはなぜですか?
- 16. rawソケットが作成されないのはなぜですか?
- 17. gensim word2vecに複数のモデルファイルが作成されているのはなぜですか?
- 18. Loudev jQueryが複数選択を作成するのはなぜですか?
- 19. Logic Appsのインスタンスが複数実行されているのはなぜですか?
- 20. UIViewControllerの複数インスタンスを作成
- 21. Webpack開発モードで複数のバンドルファイルが作成されない
- 22. Android:makeTextがToastインスタンスで動作するのはなぜですか?
- 23. 複数の子でParentNodeを作成できないのはなぜですか?
- 24. オブジェクトの新しいインスタンスが作成されたときに、関数のプロパティがデフォルトにオーバーライドされないのはなぜですか?
- 25. 1つが一致しないと「重複するインスタンス」エラーが表示されるのはなぜですか?
- 26. 同じJVM内のDataNucleusのJDOの複数のインスタンス
- 27. GAE環境内の複数のJVMインスタンスとのJavaの同期
- 28. 複数のクラウドプラットフォームでインスタンスを作成するCloudifyマネージャ
- 29. コンストラクタ引数が渡されたときにYamlインスタンスが作成されない
- 30. OnTouchListenerを使用すると、OnClickListenerが作成されていないときに複数のインスタンスが作成される
ここにいくつかの理由があります.JVMを共有しないでください。http://stackoverflow.com/questions/13539132/why-have-one-jvm-per-application –
"なぜすべてのプログラムが単一のjvmを共有できないのですか?彼らは*できないと言った? – the8472