JAVA虚拟机之创建对象

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值