1.对象的结构?
对象头
指针
实例数据
填充数据
2.Object o = new Object()占用几个字节
new Object()在堆中存储,对象结构为对象头,指针,实例数据,填充数据
假设在64位机器上,对象头占用8字节,指针占用8字节,实例数据位0,填充数据为0
new Object()占用了总共16字节。
格外情况:当开启指针压缩情况下,指针占用为4字节(也就是32位),此时加上对象头8字节,一共12字节,由于内存中寻址的原因,通常会进行填充,是按照8位进行填充,也就是8的倍数,即填充数据中占用也是4字节,结论为对象头8字节,指针4字节,填充数据为4字节。
Object o存储在栈中,在64位机器中占用8byte,通常开启压缩也就是4字节。
总结果 :8+16=24字节或者4+16 = 20字节。
在32位机器上,对象头占用32位即4字节,指针4字节,也就是8字节。此时就没有压缩的可能了。
同时 Object o占用的4字节,总共也就是4+8=12字节。