美团面试题关于Object o = new Object()的几个问题。
1、对象在内存中的存储布局?
实例化一个对象,在堆区开辟一段空间。
堆区由markword、类型指针(class point)、实例数据、对齐组成。
markword:由8个字节组成。
类型指针(class point):就是指向某class文件的指针,本来是8个字节,压缩后变成4个字节。一般项目4个字节足够了。
实例数据:就是成员变量等占用的字节。
对齐:占8个字节也就是64位对齐。前面markword、类型指针(class point)、实例数据的字节数加起来和8取整,不足的使用0填充补齐。
string成员变量:他是一个指针,指向的是常量区的地址。本来是8个字节,通过压缩后变成了4个字节。
2、Object o = new Object()在内存中占用名少字节?
通过上面的分析,对象头占用8个字节,类型指针是4个字节,加起来是12个字节