Java对象占内存大小分配的初步认识

来源:互联网 发布:doujinmode新域名 编辑:程序博客网 时间:2024/05/01 11:34

文章链接来源: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 

0 0
原创粉丝点击