创建对象是为了拜访对象,Java程序通过栈的援用(reference)数据来操作堆上的对象。因为reference类型在Java虚拟机标准中只规定了一个指向对象的援用
。并没有规定通过该援用怎么定位,拜访堆中的对象。具体须要看虚拟机的实现。
两种拜访形式:
- 句柄拜访
- 间接拜访
句柄拜访
Java堆中会划分一个句柄池,reference存储的就是对象的句柄地址,而句柄中寄存的是对象的实例数据和类型数据的地址信息。
间接拜访
Java堆对象布局就必须思考如何寄存拜访类型数据的相干信息,reference存储的就是对象的地址。
句柄拜访和间接拜访的特点
- 句柄拜访:reference寄存的是句柄地址(比较稳定),在对象挪动时(垃圾回收),只会扭转句柄中实例数据的地址,而reference无需扭转。
- 间接拜访:因为节俭了一次指针开销访问速度比拟快,因为对象的拜访在Java堆上拜访特地频繁。Sun HotSpot虚拟机采纳的是间接拜访。