Ulr*_*olz 6 java boolean micro-optimization bitvector
我们有一个包含许多实例的类,并遇到内存问题.因此,我们尝试减少这个类的内存需求.一个想法是以下.
该类有许多布尔实例变量,每个变量在初始实现中占用一个单词.可以想到将它们组合到存储在int中的迷你位向量,使得它们的组合存储器要求将是一个字.
但我怀疑Java VM正在进行这种优化,因此手动执行它不会获得任何额外的节省.对?
JVM不会为您做到这一点.每个布尔值使用的内存中的实际大小通常是一个字节左右,但一般来说,它依赖于JVM.
如果你有那么多的布尔变量,你应该考虑使用BitSet,它被设计成使用位来表示布尔值.
请参阅Javadoc以供参考:
http://docs.oracle.com/javase/7/docs/api/java/util/BitSet.html
布尔值使用1个字节的内存(在热点上).你可以使用替代品:
long[]以及未使用的空间long[],即大约20个字节JVM不太可能为您进行优化(热点8没有).