JAVA虚拟机之创建对象

实际开发中我们创建一个对象一般是通过New关键字来创建的~那么在虚拟机中是如何创建对象的呢?当遇到一条new指令后,会检查这个指令的参数在常量池中是否对应一个类的符号引用,并检查这个引用是否被虚拟机加载,解析和初始化过,若没有,先执行这个类的类加载过程。 在类加载完成后,将为这个对象进行初始化工作,就是在堆中为此类开辟一块内存空间,如何开辟呢? 指针碰撞:如果堆是整齐划分的,用过的放在一边,空闲的放在一边,那么中间有个指针作为分界的指示器,分配内存及时把指针忘空闲空间挪出对象需要的空间即可 空闲列表:内存空间是不规整的,会把空闲块记录在一个列表上,在列表上找到空间大于等于对象所需的空间,并标记那块空间被占用。 在多线程情况下,无法保证操作的原子性,有可能出现正在给A对象分配空间,指正还没修改,B对象又使用原来的指针来分配空间。要解决这个问题,可以通过(1):采用CAS和失败重试方式保证更新操作的原子性,(2):给每个线程单独在堆中分配一块独立的空间TLAB
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值