Java数据存储优化选项

Java数据存储优化选项,java,arrays,optimization,memory,32-bit,Java,Arrays,Optimization,Memory,32 Bit,我一直在考虑用Java优化我最新的两种数据存储技术,我想知道哪种存储效率最高。下面是对这两个类的描述。为便于论证,假设它们具有与数据接口的相同方法,允许用户通过以下方法单独或按范围获取或设置任何位的状态: 公共布尔getBitState(字节位索引) 检测并返回索引处位的状态bitIndex public Clazz setBitState(字节位索引,布尔值新闻状态) 将索引bitIndex处位的状态设置为newState,并返回结果对象 public int-getStateOfB

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

  • 公共布尔getBitState(字节位索引)
    • 检测并返回索引处位的状态
      bitIndex
  • public Clazz setBitState(字节位索引,布尔值新闻状态)
    • 将索引
      bitIndex
      处位的状态设置为
      newState
      ,并返回结果对象
  • public int-getStateOfBits(字节开始索引,字节结束索引)
    • 检测并返回
      startIndex
      endIndex
      之间所有位的状态,作为
      int
  • public-Clazz-setStateOfBits(字节开始索引、字节结束索引、int-newState)
    • startIndex
      endIndex
      之间的所有位的状态设置为
      newState
      中提供的值
    • 如果
      newState
      的比特数少于fit,则通过在左侧添加零来进行fit
    • 如果
      newState
      的位超过合适的位,多余的位(在左侧)将被裁剪
以下是我为利用此接口而创建的类:

无阵列
此类使用
int
作为通过逐位函数存储32位数据的方式

阵列32

此类使用一个32
boolean
s数组作为其通过标准数组交互存储32位数据的方式

使用
int
和按位函数!大多数JVM将
布尔值的数组表示为字节数组
java.util.BitSet
在内部使用一个长数组来表示它的位(64块)。

您考虑过使用吗?它似乎做了所有你需要做的事情,而且可能是优化的,内存方面的


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

与任何性能问题一样,测试它。创建越来越大的数组,并监控每个实现下的JVM内存使用情况。事实上,在SUN的JVM上,boolean数组被打包为字节数组,而不是int数组——就像单个boolean一样。