我们有一个具有许多实例的类,并遇到了内存问题。因此,我们尝试减少此类的内存需求。一个想法是将许多布尔实例变量组合成一个int类型的小位向量,这样它们的组合内存需求将为一个字。但我怀疑Java虚拟机已经自动进行了此优化,因此手动执行此操作不会获得任何额外的节省。对吗?
JVM不会代替你实现这个功能。每个布尔类型在内存中实际使用的大小通常约为一个字节,但总体而言,这取决于JVM。如果你有那么多布尔变量,应该考虑使用BitSet,它是专门用于表示布尔值的位集合。请参阅Javadoc进行参考: http://docs.oracle.com/javase/7/docs/api/java/util/BitSet.html
一个布尔值在Hotspot上使用1字节的内存。你可以使用以下替代方案: BitSet:每个布尔值使用约1位+类本身的开销,对BitSet的引用,对BitSet中的long[]的引用以及long[]中未使用的空间,即约20字节。 使用一个int,其中每个位是一个布尔值,可以用4字节存储32个布尔值。 使用一个long,其中每个位是一个布尔值,可以用8字节存储64个布尔值。 JVM不太可能为您进行此优化(hotspot 8不会)。