2

単一のデータ構造のインスタンスの比較的大きな配列をいくつか扱っています。各インスタンスは、約半ダースのフィールドで構成されています。配列は多くのスペースを占有し、7 ギガバイトのヒープ スペースを使用する VM で実行している場合でも、開発環境が停止することがわかりました。より大きなマシンに移行することはできますが、パフォーマンスに大きな影響を与えずにスペースを節約する方法も模索しています. データを調べたところ、データにかなりの冗長性があることに気付きました。データの約 80% では、6 つのフィールドのうち 4 つの値が同じです。

これにより、冗長な情報を持つこれらのインスタンスを分離し、同じ情報を含む 4 つのフィールドの静的フィールドを持つ特殊な形式のデータ構造 (元のデータ構造の拡張) に配置できるという考えが浮かびました。私の仮定では、静的フィールドはメモリ内で 1 回だけインスタンス化されるため、この情報はたとえば 100K オブジェクトによって共有されますが、これらのフィールドは、1 つのデータ構造のみがインスタンス化された場合と同じメモリを占有します。したがって、大幅なメモリ節約を実現できるはずです。

これは正しい仮定ですか?

ありがとうございました、

エリオット

4

3 に答える 3

2

私はあなたの特定のデータ構造とフライウェイトを構築するための可能なアルゴリズムを知りませんが、私は1つを提案します: http://en.wikipedia.org/wiki/Flyweight_pattern

このパターンは、考えているソリューションに非常に近く、「データを取得する方法」を適切に分離できます。

于 2012-10-24T04:26:44.133 に答える
0

ストレージにHashMapを使用してみてください。これが、等しいオブジェクトをすばやく見つける方法です。オブジェクトのhashCode関数をどのように定義するかを考える必要があります。

于 2012-10-24T04:33:45.270 に答える
0

マップ内で冗長であり、配列内の値への参照のみを持つフィールドを維持するのはどうですか。個々のデータ構造のサイズを縮小することでスペースを節約できます。

于 2012-10-24T04:24:29.187 に答える