Java数据存储优化选项
我一直在考虑用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
公共布尔getBitState(字节位索引)
- 检测并返回索引处位的状态
bitIndex
- 检测并返回索引处位的状态
public Clazz setBitState(字节位索引,布尔值新闻状态)
- 将索引
处位的状态设置为bitIndex
,并返回结果对象newState
- 将索引
public int-getStateOfBits(字节开始索引,字节结束索引)
- 检测并返回
和startIndex
之间所有位的状态,作为endIndex
int
- 检测并返回
public-Clazz-setStateOfBits(字节开始索引、字节结束索引、int-newState)
- 将
和startIndex
之间的所有位的状态设置为endIndex
中提供的值newState
- 如果
的比特数少于fit,则通过在左侧添加零来进行fitnewState
- 如果
的位超过合适的位,多余的位(在左侧)将被裁剪newState
- 将
此类使用
int
作为通过逐位函数存储32位数据的方式
阵列32
此类使用一个32
boolean
s数组作为其通过标准数组交互存储32位数据的方式 使用int
和按位函数!大多数JVM将布尔值的数组表示为字节数组java.util.BitSet
在内部使用一个长数组来表示它的位(64块)。您考虑过使用吗?它似乎做了所有你需要做的事情,而且可能是优化的,内存方面的
考虑到你的两个选择,绝对不是一系列布尔值。布尔值的数组需要额外的内存空间来存放与数据类型关联的元数据。另外,大多数JVM将为每个布尔值分配32位内存。与任何性能问题一样,测试它。创建越来越大的数组,并监控每个实现下的JVM内存使用情况。事实上,在SUN的JVM上,boolean数组被打包为字节数组,而不是int数组——就像单个boolean一样。