java.util.BitSetはlong[]に支えられているため、最小サイズは64ビットです。それぞれがサイズ23のビットセットを必要とする大量(〜2M)のオブジェクトをキャッシュする必要があります。小さいサイズに対してよりスペース効率の良いビットセットの代替手段はありますか?たとえば、long[]ではなくbyte[]でバックアップされるBitSetタイプのデータ構造はありますか?これにより、23ビットを8バイトではなく3バイトに格納できます。
質問する
1007 次
2 に答える
9
このjava.util.BitSet
クラスは、より大きなビットセット用に設計されています。サイズ23のビットセットが必要な場合、ob 3バイトに基づくビットセットでさえ、メモリを大量に使用します。これは、任意のサイズの配列が、配列自体の追加の参照(4〜8バイトである可能性が高い)を使用するためです。
メモリに関して最も経済的な解決策はint
、ビットセットの代わりにsを使用し、必要なビットセット操作の独自の実装を作成することです。ビットセットの操作は、ほとんどの場合ビット単位の操作からコピーされるため、問題なく実装できます。
boolean get(int mySet, int index) {
return (mySet & (1<<index)) != 0;
}
int set(int mySet, int index) {
return mySet | (1<<index);
}
int clear(int mySet, int index) {
return mySet & (1<<index);
}
...等々。
于 2012-09-17T09:40:57.730 に答える
0
まず、長さ3のバイト配列は3バイトよりはるかに多くかかります。Javaのオブジェクトインスタンスには、BitSetを含むメモリオーバーヘッドがあります。
メモリ消費を低く抑えるには、ビットセットにint配列の要素を使用してみてください。このような要素はオブジェクトとして表現できないため、オブジェクト指向ではなく、プロシージャインターフェイスを開発する必要があります。必要なビットセットの操作を教えてください。より詳細なアドバイスを提供します。
于 2012-09-17T09:41:45.463 に答える