1.new出一个新对象所占内存:对象头+成员变量+内存填充
(1).对象头在32位系统上占用8bytes
具体如下图
(2)成员变量所占字节:
(3)内存填充:最终与8个字节对齐。
2.查看对象在堆中所占的内存的大小
写一个程序:
public class TestDemo{
int a=4;
short a=4;
try{
Thread.sleep(1000);//使程序进入睡眠状态
}catch(Exception e){
}
cmd: javac Test.java//编译
java Test//运行
cmd:
jps//查看当前正在运行着的Java程序,得到进程号
jmap histo:live 进程号>1.log
打开1.log文档,查找类名,查看字节。
按照上面指令我们来看TestDemo类所占字节数大小为16。
分析:int占4个字节,short占2个字节,对象头占8个字节,相加共占14字节。然而最终是8个字节相对齐,所以需要再填充2个字节。