您的位置 首页 java

一张图片看懂Java对象以及组成

一个 java 对象的组成包括3部分。

1.对象头:4字节的对象类型,和8个字节的Mark Word。Mark Word记录着 hashcode ,或者sychronized时指向的对象地址或者gc年龄(4个字节,所以GC的最大年龄是15岁 哈哈!)。需要特别注意Mark Word占位情况不是一成不变的,当这个对象不是锁时(即没有被 synchronized 包住)他占位情况是一种情况,当他是锁时,而且不同级别(偏向锁,轻量级锁,重量级锁)的锁占位情况也是不一样的,具体的可以看我图片。

一张图片看懂Java对象以及组成

2.实例数据区,4字节数组长度(所以我们的数组长度是int类型的),4*n类型的对象指针n是对象类型的成员变量个数,size*m的基本类型大小 size是基本类型的对象类型,m是基本类型的大小。最后一个是实例填充,主要是考虑到 CPU缓存 的概念,现在CPU一个缓存行是64字节,如果A对象刚好是64字节那相当于A对象独占和这个CPU缓存行了,如果A是32字节B也是32字节,当B修改时CPU会把这一行的缓存清掉重新读取,影响了程序使用A对象的效率。

需要特别注意当一个对象计算过hashcode他就无法进入偏向锁。
当一个对象是偏向锁时我们计算hashcode它会变成重量级锁。

文章来源:智云一二三科技

文章标题:一张图片看懂Java对象以及组成

文章地址:https://www.zhihuclub.com/184176.shtml

关于作者: 智云科技

热门文章

网站地图