Java内存模型
对象内存中可以分为三块区域:对象头(Header),实例数据(Instance Data)和对齐填充(Padding),以64位操作系统为例(未开启指针压缩的情况)Java对象布局如下图所示:
一个新 new 出来的对象,分为四部分:
- mark word
- klass point
- Instance Data
- Padding
可使用JOL类库查看
Instance size : new一个空对象,没有任何成员变量的时候,占用16个字节。
面试室可能被问道:new 一个 Object 的时候占多少字节? 16个字节。
mark word
如果给这个对象上把锁,会有什么效果?
上图可以看出,锁信息是放在mark word里面的
klass point
这4个字节属于klass point,可以认为他是一个指针,是用来指向这个对象是属于哪个类的。
Padding
这4个字节,如果有成员变量,里面装的就是成员变量,如果没有,则是对其的作用。
对其的意思就是,mark word 所占用的字节 和 klass point所占用的字节 加起来能不能被8整除,如果不能,则需要补齐,能够被8整除。 是为了提高效率。