【发布时间】:2016-02-29 02:42:32
【问题描述】:
听说一个字节本身占用内存4个字节,字节数组内一个字节占用1个字节,那么数组内对象内的字节成员变量呢?
class SomeObject {
byte iBite;
}
public static void main(String[] args) {
SomeObject[] objs = ...
}
每个 SomeObject 的 iBite 变量在内存中是否只有 1 个字节?
【问题讨论】:
-
不,它将是“一个字节本身”并占用 4 个字节,如果没有其他原因,对象大小几乎肯定会被四舍五入。
-
对象至少有 8 个字节的开销,并且在 8 个字节的边界上对齐,你的对象是 8+1=9 个字节(至少),所以会占用 16 个字节的内存。该数组存储对对象的引用,这些对象本身至少有 4 个字节长,因此
SomeObject[100]使用 100*(16+4)=2000 字节(至少)的内存(假设分配给完整数组的不同对象),而 @ 987654324@ 使用 100 字节的内存。两者都是对数组本身 12+ 字节开销的补充。 -
对象内的一个字节将占用 1-4 个字节,具体取决于月相。
-
@Andreas 100 个“对象”的数组占用单个引用(即指针)大小的 100 倍。 (对象本身当然占用更多,但它们是分开分配的。)
-
@HotLicks 我知道。这就是为什么我说 100 * 4 用于引用,加上 100 * 16 用于对象,即 100 * (16 + 4) = 2000 字节。
标签: java arrays memory bytearray