Java数据存储优化选项

Sup*_*tar 3 java memory arrays optimization 32-bit

我一直在考虑用Java优化我最新的两种数据存储技术,并且想知道哪种内存效率最高.以下是这两个类的描述.为了便于论证,假设它们具有与数据接口相同的方法,允许用户通过以下方法单独或按范围获取或设置任何位的状态:

  • public boolean getBitState(byte bitIndex)
    • 检测并返回索引处的位状态 bitIndex
  • public Clazz setBitState(byte bitIndex, boolean newState)
    • 将index位置的位的状态bitIndex,以newState及返回生成的对象
  • public int getStateOfBits(byte startIndex, byte endIndex)
    • 检测并返回之间的所有位的状态startIndexendIndex作为int
  • public Clazz setStateOfBits(byte startIndex, byte endIndex, int newState)
    • 设置之间的所有位的状态startIndex,并endIndex在所提供的价值newState.
    • 如果newState位数少于拟合,则通过向左添加零来使其适合
    • 如果newState位数多于拟合,则会裁剪多余的位(在左侧)

这些是我使用此接口所做的类:

IntArray


该类使用一种int通过按位函数存储32位数据的方法.

Array32


该类使用32 booleans 的数组作为通过标准数组交互存储32位数据的方式.

Vla*_*lad 6

使用int和按位功能!大多数JVM将表示一个boolean字节数组的数组.java.util.BitSet在内部使用一个long数组来表示它的位(64块).


Viv*_*sse 5

你考虑BitSet上课吗?看起来它可以完成您需要做的所有事情,并且可能在记忆方面得到很好的优化.

考虑到你的两个选择,绝对不是一系列布尔.布尔数组需要额外的内存空间用于与数据类型关联的元数据.此外,大多数JVM将为每个布尔值分配32位内存.