JVM (PART IV)对象的访问定位

我们可以使用栈上的reference来访问堆中的对象。如何访问有以下两种主流的方法,具体的方式取决于JVM的具体实现。

句柄访问:

如果使用句柄的访问方式的话,java堆中会开辟出一块内存作为句柄池。reference中保存的就是对象的句柄地址,句柄中包含了对象实例数据和类型数据的各自具体位置。如果是这种方式的话对象头(header)就不需要保存指向类型的指针。
JVM (PART IV)对象的访问定位
优点:对象被移动时只会改变句柄中的实例数据指针(在GC中非常常见),reference本身不需要改变。

通过直接指针访问:

这个时候对象头(header)需要保存指向类型的指针。reference保存的就是对象的地址。JVM (PART IV)对象的访问定位
优点:速度快,节省了一次指针定位的时间开销。HotSpot JVM使用的是这一种方式。