1)Javaで記述されたWebサービスがある場合、実行するにはJVMインスタンスが必要になります。では、JVMをデーモンプロセスにすることはできますか?
はい、できます。それがどのように行われるかは、O / SとWebサーバーコンテナ自体に依存します。
2)「はい」の場合、他のJavaアプリケーションを実行すると、JVMのこのインスタンスが使用されますか、それとも新しいインスタンスが作成されますか?
いいえ。各Javaアプリケーションは独立したJVMを使用します。
各JVMは個別のプロセスであるため、スタックやヒープなどを共有することはありません。(一般に、共有される可能性があるのは、コアJVMとネイティブライブラリのコードを保持する読み取り専用セグメントのみです...通常のプロセスがコードセグメントを共有するのと同じ方法です。)
3)どのマシンでも使用可能なメインメモリは一定です。初期ヒープサイズを指定せずにn個のJavaプロセスを同時に開始すると、ヒープサイズはプロセス間でどのように分散されますか?
サイズを指定しない場合にヒープを作成するサイズを決定するメカニズムは、使用しているJVM /プラットフォーム/バージョン、および「クライアント」モデルと「サーバー」モデル(ホットスポットJVMの場合)のどちらを使用しているかによって異なります。ヒューリスティックは、他のJVMの数やサイズを考慮していません。
参照:https: //stackoverflow.com/a/4667635/139985
実際には、ヒープサイズを直接指定する方がよいでしょう。
4)n個のJVMインスタンスを管理するプロセスはありますか、それともOS自体によって管理されますか?
どちらでもない。JVMインスタンスの数は、プロセスを開始できるさまざまなもののアクションによって決定されます。例:デーモンスクリプト、コマンドスクリプト、コマンドラインでコマンドを入力するユーザーなど。最終的に、OSはリソースが不足すると、それ以上のプロセスの開始を拒否する可能性がありますが、JVMは他のプロセスと同じように扱われます。
5)GC中にストップザワールドが発生すると、他のJVMインスタンス(私が想定するさまざまなスレッド)が影響を受けますか?
いいえ。JVMは独立したプロセスです。それらは可変状態を共有しません。ガベージコレクションは、各JVMで個別に動作します。