SCALAでのビットセットメモリの使用
-
01-10-2019 - |
質問
たとえば、ScalaのBitsetのメモリ使用法とは何かを知りたいです。
var bitArray:BitSet=new BitSet(10)
bitArray.add(0)
bitArray.add(2)
bitArray.add(4)
bitArray.add(6)
bitArray.add(8)
それは偶数0,2,4,6,8を含むアレイとどのように比較されますか?
バイナリで番号を書くのはどうですか:
var bitArray:BitSet=new BitSet(32)
bitArray.add(5)
bitArray.add(3)
bitArray.add(2)
bitArray.add(1)
bitArray.add(0)
それは47番と比較してどうですか?
ここでメモリの使用について尋ねています。しかし、より開かれた質問として、あなたが知っていれば、Bitsetの利点/短所または使用法(他の一般的なデータ型へのWR)は何ですか。
ありがとう、
解決
Scala 2.8でのBitsetの実装をこちらで見ることができます。 scala.collection.mutable.bitset.
ロングの配列に基づいて実装されています。アレイのサイズは、保存されている最高の数にのみ依存します。保存されている最高の数を64で割って丸めていると、配列のサイズがあります。配列内の各要素は8バイトを消費します。
つまり、その中に保存されている最大の数を8で割ると、ビットセットのバイトでサイズがほぼ得られます。仮想マシンメモリ管理のオーバーヘッドのために「大まかに」。配列へのポインターにはメモリが必要であり、アレイ自体にはオーバーヘッドがあるためです。
挿入の順序またはビットセットに保存されている要素の実際の数は、割り当てられたメモリのサイズに影響を与えません。
2つの例では、8バイトのメモリを使用して数値を保存するのに必要な長い要素は1つだけです。両方の例では、最高の数は64未満です。
5つの数値を保存するINTの配列は、5 * 4バイト= 20バイトとオーバーヘッドを消費します。 n番号を保存するには、約n * 4バイトが必要です。
したがって、(countofnumbersStored * 4)バイトとバイトを比較しています。