簡體   English   中英

Java數據存儲優化選項

[英]Java data storage optimization options

我一直在考慮用Java優化我最新的兩種數據存儲技術,並且想知道哪種內存效率最高 以下是這兩個類的描述。 為了便於論證,假設它們具有與數據接口相同的方法,允許用戶通過以下方法單獨或按范圍獲取或設置任何位的狀態:

  • public boolean getBitState(byte bitIndex)
    • 檢測並返回索引bitIndex處的位狀態
  • public Clazz setBitState(byte bitIndex, boolean newState)
    • 將索引bitIndex處的位狀態設置為newState並返回結果對象
  • public int getStateOfBits(byte startIndex, byte endIndex)
    • 檢測並返回startIndexendIndex之間所有位的狀態為int
  • public Clazz setStateOfBits(byte startIndex, byte endIndex, int newState)
    • startIndexendIndex之間的所有位的狀態設置為newState提供的值。
    • 如果newState的位數少於fit,則通過在左側添加零來使其適合
    • 如果newState位數多於fit,則會裁剪多余的位(在左側)

這些是我使用此接口所做的類:

IntArray


該類使用int作為通過按位函數存儲32位數據的方法。

Array32


該類使用32個boolean的數組作為通過標准數組交互存儲32位數據的方式。

使用int和按位函數! 大多數JVM將boolean數組表示為字節數組。 java.util.BitSet內部使用long數組來表示它的位(64塊)。

您是否考慮過使用BitSet 看起來它可以完成您需要做的所有事情,並且可能在記憶方面得到很好的優化。

考慮到你的兩個選擇,絕對不是一系列布爾。 布爾數組需要額外的內存空間用於與數據類型關聯的元數據。 此外,大多數JVM將為每個布爾值分配32位內存。

暫無
暫無

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

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