我们有一个有很多实例的类并且遇到了内存问题。因此,我们尽量减少这个类的内存需求。一个想法如下。
该类有许多布尔实例变量,在幼稚的实现中,每个变量都会占用一个单词。可以考虑将它们组合成一个存储在 int 中的迷你位向量,这样它们的组合内存需求将是一个单词。
但我怀疑 Java VM 无论如何都在进行这种优化,因此手动执行它不会获得任何额外的节省。正确的?
我们有一个有很多实例的类并且遇到了内存问题。因此,我们尽量减少这个类的内存需求。一个想法如下。
该类有许多布尔实例变量,在幼稚的实现中,每个变量都会占用一个单词。可以考虑将它们组合成一个存储在 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 没有)。