虚拟机中创建与访问对象

Java程序无时无刻不在和对象打交道。

Java语言中创建对象使用new关键字,当虚拟机遇到一条new指令时,开始创建对象,分为以下几个步骤:

1. 类加载、解析与初始化;

2. 加载完成后,新对象所需要的内存空间大小已被确定,虚拟机将一块确定大小的内存从堆中划分出来,这里有两种分配方式,1. 若Java堆是规整的,则分配内存只需将指针向空闲空间那边移动一段与对象大小相等的距离,这种方式被称为“指针碰撞”,2. 若Java内存不是规整的,虚拟机就需要维护一张列表,记录哪些空间是可用的,这种分配方式称为“空闲列表”,采用哪种方法与采用的垃圾收集算法有关;

本地线程分配缓冲(TLAB):

每个线程在堆中预先分配一小块内存,称为本地线程分配缓冲(TLAB),哪个线程要使用内存,就在自己线程的TLAB上分配,只用TLAB用完并分配新的TLAB时,才需要同步锁定;


对象的访问定位:主流的访问方式有两种

1. 句柄访问:堆中划分一块句柄池,栈中存储对象的句柄地址,句柄中包含对象实例的具体地址(句柄地址稳定);

2. 直接指针访问:栈中存放的直接就是对象地址(寻址快);


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值