虚拟机学习二-对象的创建

对象的创建关注以下几个问题:

1、为创建的对象分配内存空间有两种方式:

指针碰撞:

即规整的划分空间,内存空间中用过的放一边,没用过的放另外一边。需要分配时,指针向空闲空间那边挪动一段与对象大小相等的距离。

空闲列表:

已用和未用空间相互交错,虚拟机需要维护一个列表,记录哪些内存是可以用的,在分配的时候找到一块足够大的给创建的对象实例,并更新列表记录。

2、对象创建在并发情况下不是线程安全的。此时有两种解决方案:

-对分配空间的行为进行同步,采用cas配上失败重试的方法保证操作的原子性。

-为每个线程在Java堆中预先分配一小块内存,称为本地线程分配缓冲(TLAB)。哪个线程需要分配,就在自己的TLAB上进行。当TLAB空间不足时,再采用同步的方式进行。虚拟机是否使用TLAB,可以通过-XX:+/-UseTLAB参数来设定。

3、虚拟机对对象设置对象头信息。如这个对象时哪个类的实例、对象的哈希码、对象的GC分代年龄等等。

在虚拟机的角度来看,一个新的对象已经创建完成了。但是从Java程序的角度来看,这个对象的创建才刚刚开始,因为init方法还没有执行,所有字段值还是零。所以new指令之后会执行init方法,把对象按照程序员的意愿进行初始化。

转载于:https://www.cnblogs.com/SunseCode/p/4265865.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值