0

メモリ内に多くのオブジェクトを必要とするアプリケーションで開発しています。最大の構造の1つはタイプです

Map<String,Set<OwnObject>> (with Set as HashSet)

OwnObject は、データベース内のレコードを表す重いオブジェクトです。アプリケーションは動作しますが、メモリ フットプリントがかなり大きくなります。2001 年のこの Java Specialistsニュースレターを読んで、上記の大きな構造体のメモリ使用量を分析しました。HashSet は背後で HashMap を使用しますが、これは非常に重いオブジェクトであり、追加メモリのほとんどがここにあると思います。

構造体のメモリ使用量を最適化しようとして、複数のバージョンを試してみました。

Map<String,List<OwnObject>> (with List as ArrayList)
Map<String,OwnObject[]>

どちらも機能し、どちらも Set<> を使用したバージョンよりもはるかに無駄がありません。ただし、セット コントラクト (エントリの一意性) は維持したいと思います。

1 つの方法は、自分でロジックを実装することです。ArrayList を拡張して、add() でコントラクトを確保できます。

Set コントラクトを尊重する軽量コレクションを実装するフレームワークはありますか? それとも、一意性を自分で確認せずに使用できる Java コレクションの何かが欠けているのでしょうか?

4

1 に答える 1

0

私が実装した解決策は次のとおりです。

Map<String,OwnObject[]>

配列への追加と削除は、Arrays.binarySearch() と 2 つのスライス System.arraysCopy() を使用して行われました。これにより、並べ替えと一意性が側で発生します。

于 2013-05-17T05:39:28.097 に答える