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