おそらくそれは部分的な答えにすぎません。
JVM のメモリ フットプリントはどれくらいですか
Java アプリの完全なフットプリントは、ヒープ スペースと非ヒープ スペースで構成されます (このように呼びましょう)。非ヒープ空間に存在するものの例をいくつか挙げると、PermGen または Metaspace、コードからの直接割り当て (malloc)、NIO もネイティブ メモリを使用します。
どうすれば最小化できますか?
通常、ヒープはフットプリントの最大の部分を占めます。それで、私はそれから始めます。
非ヒープ領域に関しては、最小化できます: PermGen (最大サイズが冗長な場合)、スレッド スタック (特に 64 ビット JMM では非常に大きい)、およびコード キャッシュ (もちろん、パフォーマンスのために)。
それらの JVM は JIT キャッシュを共有しますか?
通常の状態では (そして私は他の状態を認識していません)、すべてのプロセスに独自のフットプリントがあります。それが実際にプロセスとスレッドの違いです。複数の JVM に戻ると、各 JVM は個別のプロセスです。
rt.jar を共有する必要があります
もちろん、同じディレクトリ (同じインストール) から Java を起動すると、それらは同じ rt.jar を共有しますが、それはクラスのソースとしてのみです。たとえば、String クラスは、実行中の JVM の数だけロードされます。