簡體   English   中英

Scala中的BitSet內存使用情況

[英]BitSet memory usage in Scala

我想知道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

它基於Longs數組實現。 數組的大小僅取決於存儲在其中的最大數字。 將存儲在其中的最大數字除以64,向上舍入,並且您具有數組的大小。 數組中的每個元素占用8個字節。

這意味着除以8存儲在其中的最大數字,大致產生BitSet的字節大小。 “粗略”是因為虛擬機內存管理開銷,因為指向數組的指針也需要一些內存,因為數組本身有一些開銷。

插入順序或存儲在BitSet中的實際元素數量不會影響分配的內存大小。

對於您給出的兩個示例,使用8個字節的內存只需要一個Long元素來存儲數字,因為在兩個示例中,最高數字小於64。

存儲任意五個數字的Ints數組將消耗5 * 4字節= 20字節加上開銷。 要存儲n個數字,您需要大約n * 4個字節。

因此,您將(highestNumberStored / 8)字節與(countOfNumbersStored * 4)字節進行比較。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM