[英]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)
startIndex
和endIndex
之间所有位的状态为int
public Clazz setStateOfBits(byte startIndex, byte endIndex, int newState)
startIndex
和endIndex
之间的所有位的状态设置为newState
提供的值。 newState
的位数少于fit,则通过在左侧添加零来使其适合 newState
位数多于fit,则会裁剪多余的位(在左侧) 这些是我使用此接口所做的类:
该类使用int
作为通过按位函数存储32位数据的方法。
该类使用32个boolean
的数组作为通过标准数组交互存储32位数据的方式。
使用int
和按位函数! 大多数JVM将boolean
数组表示为字节数组。 java.util.BitSet
内部使用long数组来表示它的位(64块)。
您是否考虑过使用BitSet
类 ? 看起来它可以完成您需要做的所有事情,并且可能在记忆方面得到很好的优化。
考虑到你的两个选择,绝对不是一系列布尔。 布尔数组需要额外的内存空间用于与数据类型关联的元数据。 此外,大多数JVM将为每个布尔值分配32位内存。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.