Java对象结构

Java对象结构

在这里插入图片描述

对象头

由三个区域组成:markword,元数据指针,数组长度标记

markword

8个字节:
用于存储对象自身的运行时数据,
如哈希码(HashCode)(32位=4byte)、GC分代年龄(4位)、
锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等,
这部分数据的长度在32位和64位的虚拟机中分别为32bit和64bit,
官方称它为“Mark Word”。

元数据区域指针

8个字节,用于指向元数据区域,默认开始指针压缩,就是4个字节

数组长度标记

4个字节(数组类型对象才会有)

实例数据

存储数据区域

填充区域

虚拟机规定,对象大小必须是8个字节的整数倍,不够的话就填充

使用JOL工具查看内存布局

给大家推荐一个可以查看普通java对象的内部布局工具JOL(JAVA OBJECT LAYOUT),使用
此工具可以查看new出来的一个java对象的内部布局,以及一个普通的java对象占用多少字节。
引入maven

<dependency>
 <groupId>org.openjdk.jol</groupId>
 <artifactId>jol‐core</artifactId>
 <version>0.10</version>
 </dependency>

使用`

 System.out.println(ClassLayout.parseInstance(obj)
 .toPrintable());

测试

1 public static void main(String[] args) throws InterruptedException {
2 Object obj = new Object();
3 //查看对象内部信息
4 System.out.println(ClassLayout.parseInstance(obj).toPrintable());
5 }

在这里插入图片描述
OFFSET:偏移地址,单位字节;
SIZE:占用的内存大小,单位为字节;
TYPE DESCRIPTION:类型描述,其中object header为对象头;
VALUE:对应内存中当前存储的值,二进制32位;
2. 关闭指针压缩后,对象头为16字节:
­XX:­UseCompressedOops

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值