Java中布尔类型数组的大小是多少?

7

据我所知,布尔类型在内存中占用16字节(8字节作为头部,1字节作为有效载荷,*按8字节对齐)。

如果布尔变量是一个数组,需要多少空间呢?

参考这里


1
你为什么不直接测量它呢? - jmj
2
虽然这不是问题的答案,但更好的方法是使用java.util.BitSet,它专门设计用于存储布尔值数组。 - Yuriy Nakonechnyy
2个回答

7
你是在询问Boolean对象还是boolean原始类型?对象的大小可能为16个字节(虽然具体实现取决于语言和编译器),而boolean通常只会占用4个字节(隐式地使用了int)。因此,boolean[]占用N*4个字节(其中N是数组的大小),再加上一些对象头。如果按照你对Boolean大小的假设,Boolean[]将占用N * 16 + header个字节。
话虽如此,请考虑编写自己的类似数组的类,并在一个int中打包32个布尔值(你需要手动编写几个位操作),就像BitSet类所做的那样,这样可以更好地节省空间。

2
数组具有length(整数)属性。 - Prince John Wesley
1
在Oracle的Java虚拟机实现中,布尔数组实际上是由8位值的数组来实现的。请参阅http://docs.oracle.com/javase/specs/jvms/se8/html/jvms-6.html#jvms-6.5.baload。 - Per Mildner

-1

数组对象的大小将为:8 + 4 = 12字节(这里的4是数组的长度) 如果数组长度为N,则布尔元素将占用N * 16字节 因此,大小将为:(12 + N * 16)字节,向上取整到8

例如:如果N = 10,则12 + 10 * 16 = 172,经过JVM舍入后,大小将为176字节。


1
上述计算是不正确的。首先,布尔数组将包含对布尔对象的引用,将有N个引用,它们的大小与布尔对象的大小无关(在HotSpot中,引用通常为4个字节)。此外,上述似乎假定所有布尔对象都是不同的。通常情况下,您会重复使用Boolean.TRUE和Boolean.FALSE,因此根本不需要额外的空间来存储布尔对象。 - Per Mildner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接