创建对象

在java中   字节码new  表示创建对象

当虚拟机遇见该指令时

会从栈顶取得目标对象在常量池中的索引,接着定位到目标对象的类型。

然后虚拟机根据该类的状态,采取相应的分配技术,在内存中分配实例空间,并完成示例数据和对象头的初始化

这样一个对象在jvm中就创建好了。


具体创建流程图

首先获取对线类型信息并验证是否解析过,若通过采用快速分配

否则慢速分配


实例的创建流程图

(1)验证类已被解析

(2)获取instanceKlass 并确保已经被初始化

(3)根据状态采取相应的分配措施


快速分配

若其他符合  分配只是在内存空间中划分可用内存,可以较高效率分配内存

分配空间分为线程私有空间   共享的内存堆空间

HotSpottongue线程局部分配空间技术  ThreadLocal Allocation Buffers 简称TLAB可以在线程私有空间分配

VM参数   UseTLAB 来关闭或开启


选择TLAB 尝试分配 不需要枷锁  若果失败 则尝试枷锁在Eden区分配

选择Eden区失败 则尝试在Eden共享区分配  

因为共享需要保证线程安全  所以采用原子操作进行分配  若失败 尝试到成功为止。


分配成功后开始初始化  根据vm选项  zeroTlab对实例空间填零  默认false

接下来初始化对象头

(1)设置Mark Word

(2)设置类元数据指针  根据vm选项采取相应(压缩)措施

完成了空间分配和初始化  可以设置栈顶对象的引用


慢分配

需要在分配实力前 对类进行解析 确保类及依赖类得到正确的解析和初始化

调用InterpteterRuntime模块_new()进行的   可以分为单独一片 后面有机会再更新

1.确保初始化类不是抽象类

2.确保类已初始化

3.分配实例

4.在线程中设置对象引用


实战探测jvm内部对象 后面再更新





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值