7

同じコンピューターで同時に複数回インスタンス化できるアプリケーションに取り組んでいます。クラスはすべてのアプリケーションで同じであるため、各 JVM はアプリケーション クラスを独自のメモリに不必要にロードします。

CDS hereおよびhereについて読みましたが、JDK クラスに対してのみ有効なようです。

JVM 間でアプリケーション クラスのデータを共有するにはどうすればよいですか?

4

2 に答える 2

3

私はこのトピックに特に精通していませんでしたが、いくつかの調査を行いました。ほとんどの JVM では実際には不可能であると、かなり確実に言えると思います。以下の質問はあなたの質問に似ており、役立つ回答とコメントがあります。

複数の JVM プロセスが共通クラスのメモリを共有できますか?

可能なオプションは、共有したいクラスを 1 つのプロセスにまとめ、JMX (Java Management Extensions) などを使用してそれらの機能を公開することです。そうすれば、何度もロードされる他のプロセスがすべてのクラスをロードする必要がなくなります。しかし、これが総リソースフットプリントをどれだけ削減できるかは、もちろん疑問であり、ケースに依存します.

于 2012-12-21T02:08:43.803 に答える
1

理論的には良さそうに思えますが、これは実際には実用的ではありません。Java クラスのストレージ イメージは一定量の定数データで構成されていますが、おそらくそれと同じくらい多くの「変数」データ (他のクラスへのリンケージ ポインター、さまざまな実行時テーブル、JITCed コードなど) で構成されています。これは難しいことであり、最高のパフォーマンスを生み出さない設計につながります。

于 2012-12-21T02:18:39.743 に答える