文章链接来源:http://my.oschina.net/thinkerfan/blog/99658
以下是全文信息:
问题1? java的对象引用占用多少个字节?
问题2? null值占几个字节,boolen值占几个字节?
问题3?对象占用字节大小如何计算?
如下结论都是基于32位系统下,参考资料:
http://wenku.baidu.com/view/e5121f3043323968011c92e3.html
问题一:
一个引用占用4个字节
问题二:
null也占用4个字节,boolean值占用1个字节
空对象占八个字节,对象的引用占四个字节
即:Object o = null;//这里只声明了一个对象引用而已,占用四个字节。
问题三:
对象占用内存大小计算公式:
对象占用字节数=基本的8字节+基本数据类型所占的(累加后对齐到8的倍数)+对象引用所占的 (累加后对齐到8的倍数)
比如:Object o = new Object();
系统分配了12个字节,引用变量占用4个,纯Object对象占8个字节
例1:
class A{
int a;
char b;
}
执行A a = new A();语句时引用变量a指向的对象占用的字节数为:
8+{(4(int)+2(char)=6)对齐到八的倍数为8} = 16
实际这语句执行时还生成了一个引用变量a占用4个字节,即总共分配了20个字节。
例2:
class B{
Integer a;
long b;
byte c;
}
执行B b = new B();语句时引用变量b指向的对象占用的字节数为:
8+{(8(long)+1(byte))对齐到八的倍数为16}+{4(Integer对象的引用)对齐到八的倍数为8}=32
例3:
public class Integer{
public int value;
}
执行Integer i = new Integer();语句时引用变量i指向的对象占用的字节数为:
8+{4,对齐到八的倍数为8} = 16;
同理:
public class Byte{
public byte value;
}
Byte b = new Byte();语句时引用变量b指向的对象占用的字节数为:
8+{1,对齐到八的倍数为8} = 16;
例4数组的内存分配
后续在学习:
参考网站:
http://mercyblitz.iteye.com/blog/710998