基本类型的大小是固定的,但是非基本类型的大小确不是固定的。
在Java中,一个空对象的大小是8byte,这个是指堆中一个没有任何属性的对象的大小。
Object o = new Object();
上面代码所占用的内存大小是4byte+8byte,其中4byte是引用o在栈中占用的内存大小,8byte是new Object()在堆中占用的内存大小。
再看下面这个对象:
Class NewObject { int count; boolean flag; Object o;}
其大小为:int大小(4byte)+ boolean大小(1byte)+ Object空对象大小(8byte)+ 空Object引用大小(4byte)= 17byte。但是因为Java在对对象的内存分配时都是以8的整数倍来分,因此大于17byte的最接近的8的整数倍是24,因此此对象的大小为24byte。