同じコンピューターで同時に複数回インスタンス化できるアプリケーションに取り組んでいます。クラスはすべてのアプリケーションで同じであるため、各 JVM はアプリケーション クラスを独自のメモリに不必要にロードします。
CDS hereおよびhereについて読みましたが、JDK クラスに対してのみ有効なようです。
JVM 間でアプリケーション クラスのデータを共有するにはどうすればよいですか?
私はこのトピックに特に精通していませんでしたが、いくつかの調査を行いました。ほとんどの JVM では実際には不可能であると、かなり確実に言えると思います。以下の質問はあなたの質問に似ており、役立つ回答とコメントがあります。
複数の JVM プロセスが共通クラスのメモリを共有できますか?
可能なオプションは、共有したいクラスを 1 つのプロセスにまとめ、JMX (Java Management Extensions) などを使用してそれらの機能を公開することです。そうすれば、何度もロードされる他のプロセスがすべてのクラスをロードする必要がなくなります。しかし、これが総リソースフットプリントをどれだけ削減できるかは、もちろん疑問であり、ケースに依存します.
理論的には良さそうに思えますが、これは実際には実用的ではありません。Java クラスのストレージ イメージは一定量の定数データで構成されていますが、おそらくそれと同じくらい多くの「変数」データ (他のクラスへのリンケージ ポインター、さまざまな実行時テーブル、JITCed コードなど) で構成されています。これは難しいことであり、最高のパフォーマンスを生み出さない設計につながります。