java调优随记-java对象大小

在java中,基本数据类型的大小是固定。但是java对象的大小是不固定的,需要通过计算。

在java中,一个空对象(没有属性和方法的对象)在堆中占用8byte,比如 Object obj = new Object();另外栈中存储引用需要占用4byte的空间,总共需要16byte空间(喂,为为什么不是12byte?因为java在内存分配的时候都是以8的倍数在分配)。在java中所有的对象都继承Object,所以不论什么样的对象大小都不能小于8byte。

计算一下下面的对象的大小?

Class ObjectSample {

  int i = 0;

  boolean done = false;

  Object obj;

}

计算过程:obj为8byte,int为4byte,boolean为1byte,栈中对象引用为4byte,总数为17byte。由于java内存分配的时候是以8的倍数分配的,所以最小空间是24byte。

如果i被生命为对象类型,那么i占用的空间就不是4byte了,而是12byte(对象要占8个byte,引用占4byte),实际上根据内存分配规则要占16byte。由此可见基本类型的包装类型占用空间是很大的。

 

你可能感兴趣的:(java)