虚拟机中对象的创建、结构及访问 总结

创建

1、从常量池中加载类的符号引用(类的数据结构和方法信息等),找不到就代表类还没有加载,进行类的加载

2、给对象分配内存(对象创建过程中,内存区域大小就已经定义好了)使用方式看垃圾回收是否有内存整理功能

2.1指针碰撞

2.2空闲列表

3、线程安全问题

3.1加锁,同步获取效率低

3.2每个线程操作不同区进行内存分配,本地线程分配缓冲 TLAB 不够时再进行分配新的内存(使用同步)

4、初始化对象,基本数据类型有内容,其他数据类型为null

5、执行构造方法

 

 

结构

1、header(对象头)

1.1自身运行时数据(markWord)- hashcode gc分代年龄 锁状态标志 线程持有的锁 偏向线程id 偏向时间戳,大小是根据操作系统 32位和64位。存储方式,根据不同锁状态,每个位置放入不同的内容,类似mqtt。具体百度找图看

1.2类型指针。确定元数据(是哪个类的实例),(直接访问的定位,需要有类型指针)

1.3 java 数组保存数组长度的数据

2、instanceData (实例信息)

存储顺序:分配策略(hotspot 相同字节数字段放在一起,long/double short/char)和源码字段顺序影响

3、padding (对齐填充)

占位符功能 hotspot 要求对象起始地址要是8个字节的整数倍,所以每个对象要是8个字节的整数倍,填充不足8字节的内容

 

访问定位

1、直接访问,通过引用直接访问对象的内存地址(对象中存储类型指针)hotspot使用

2、使用句柄,引用指向句柄(句柄中存储类型指针和对象内存指针)句柄池单独存储

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值