对象的创建、内存布局、对象头、定位、如何分配

对象的创建过程

  1. classload 类加载
  2. class linking 校验文件符合jvm规范 准备 解析
  3. class initializing 初始化(调用类的,给静态成员变量赋值)
  4. 申请对象内存
  5. 成员变量赋默认值
  6. 调用构造方法 1.成员变量顺序赋值初始值 2.执行构造方法语句

对象内存布局

普通对象

1.对象头 8字节
2.class pointer指针:-XX:+UseCompressedClassPointers 4个字节,不开启为8个字节
3.实例数据: 引用类型:-XX:+UseCompressedOops 4个字节,不开启为8个字节
4.padding对齐:8的倍数

数组对象

1.对象头 8字节
2.class pointer指针:-XX:+UseCompressedClassPointers 4个字节,不开启为8个字节
3.数组长度 4字节
4.数组数据
5.padding对齐:8的倍数

hostpot开启内存压缩的规则(64位机器)
4G以下 直接砍掉高32位
4G-32G 默认开启内存压缩 class pointer和 Oops
32G 压缩无效,使用64位

对象头

Mark Word用于存储对象自身的运行时数据,如哈希码(HashCode)、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等等,占用内存大小与虚拟机位长一致。

java对象的最大年龄只能是15,因为只有4位。
hashCode方法和System.identityHashCode()会让对象不能使用偏向锁,所以如果想使用偏向锁,那就最好重写hashCode方法。

markword 32位
在这里插入图片描述
markword 64位
在这里插入图片描述

对象定位

  • 句柄池
  • 直接指针

对象分配

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值