(二)对象创建、布局、访问

对象在堆中

1.创建对象

这里的对象(指普通对象,不包括数组、Class对象等);

虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一***个类的符号引用***,并且检查这个符号引用代表的类是否被加载、解析、或初始化过,没有先执行类加载过程,接下来为对象分配内存,并执行方法为字段赋初始化值;

2. 对象在java堆内存中的布局

对象在内存中存储的布局分为:对象头、实例数据、对齐填充;

对象头:包括两部分(1)、存储对象自身的运行时数据(如:哈希码、GC分代年龄、锁状态标志、线程持有的锁、偏向锁ID、偏向时间戳等),这部分数据在32位和64位虚拟机中分别为32bit和64bit(2)、类型指针即对象指向他的类元数据的指针,通过该指针找到这个对象是哪个类的实例;

实例数据:字段,无论是从父类继承还是子类中定义的;

对其填充:不是必然存在,也没有特殊含义,仅起占位符的作用;

3. 访问对象

两种主流的访问方式:

***1. 句柄方式访问:***java堆中将划分一部分内存来作为句柄池,栈中引用存储的是对象的句柄地址,而句柄中存储的是对象实例数据地址和类型数据(静态成员变变量)的具体地址;

***2. 指针方式访问:***引用中存储的是对象的起始地址,而对象布局中必须考虑如何放置访问类型数据的相关信息;

…(img-uh5nPzYZ-1594971105594)]

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值