乐趣区

关于jvm:JAVA的对象访问定位

创建对象是为了拜访对象,Java 程序通过栈的援用 (reference) 数据来操作堆上的对象。因为 reference 类型在 Java 虚拟机标准中只规定了 一个指向对象的援用。并没有规定通过该援用怎么定位,拜访堆中的对象。具体须要看虚拟机的实现。

两种拜访形式:

  • 句柄拜访
  • 间接拜访

句柄拜访

Java 堆中会划分一个句柄池,reference 存储的就是对象的句柄地址, 而句柄中寄存的是对象的实例数据和类型数据的地址信息。

间接拜访

Java 堆对象布局就必须思考如何寄存拜访类型数据的相干信息,reference 存储的就是对象的地址。

句柄拜访和间接拜访的特点

  • 句柄拜访:reference 寄存的是句柄地址(比较稳定), 在对象挪动时(垃圾回收), 只会扭转句柄中实例数据的地址,而 reference 无需扭转。
  • 间接拜访: 因为节俭了一次指针开销访问速度比拟快, 因为对象的拜访在 Java 堆上拜访特地频繁。Sun HotSpot 虚拟机采纳的是间接拜访。

退出移动版