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