繁体   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