JVM(十一)对象访问定位方式
- 当我们在堆上创建一个对象实例后,就要通过虚拟机栈中的reference类型数据来操作堆上的对象。现在主流的访问方式有两种(Hotspot虚拟机采用的是第二种)
1.使用句柄访问对象。即reference中存储的是对象句柄的地址,而句柄中包含了对象实例数据与类型数据的具体地址信息,相当于二级指针。
2.直接指针访问对象。即reference中存储的就是对象地址,相当于一级指针。 - 对比
1.垃圾回收分析:方式1当垃圾回收移动对象时,reference中存储的地址是稳定的地址,不需要修改,仅需要修改对象句柄的地址;方式2垃圾回收时需要修改reference中存储的地址。
2.访问效率分析,方式二优于方式一,因为方式二只进行了一次指针定位,节省了时间开销,而这也是Hotspot采用的实现方式。
直接指针访问
对象句柄访问