Использование памяти BitSet в Scala

Я хотел бы знать то, что является использованием памяти BitSet в Scala. Например, если я делаю:

  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 к другим типам общих данных).

Спасибо,

5
задан Skuge 29 June 2010 в 12:57
поделиться

1 ответ

Вы можете посмотреть реализацию BitSet в Scala 2.8 здесь: scala.collection.mutable.BitSet .

Реализован на основе массива Long. Размер массива зависит только от самого большого числа, хранящегося в нем. Разделите самое большое число, хранящееся в нем, на 64, округляя в большую сторону, и вы получите размер массива. Каждый элемент в массиве занимает 8 байтов.

Это означает, что деление на 8 наибольшего числа, хранящегося в нем, примерно дает размер BitSet в байтах. «Примерно» из-за накладных расходов на управление памятью виртуальной машины, потому что указателю на массив также требуется некоторая память и потому что сам массив имеет некоторые накладные расходы.

Порядок вставки или фактическое количество элементов, хранящихся в BitSet, не влияет на размер выделенной памяти.

В двух приведенных вами примерах для хранения чисел требуется только один Long-элемент с использованием 8 байтов памяти, так как в обоих примерах максимальное число меньше 64.

Массив Ints, хранящий любые числа. пять чисел потребуют 5 * 4 байта = 20 байтов плюс служебные данные. Для хранения n чисел вам понадобится примерно n * 4 байта.

Таким образом, вы сравниваете (highNumberStored / 8) байтов с (countOfNumbersStored * 4) байтами.

16
ответ дан 18 December 2019 в 10:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: