JAVA虚拟机——对象的访问方式

Java程序通过栈上的reference数据来操作堆上具体对象。由于reference类型在Java虚拟机规范中规定了一个指向对象的引用,并没定义何种方式去定位,访问堆中的对象的具体位置,所以对象的访问方式也是取决于虚拟机的实现而定的,目前主流的实现方式有使用句柄和直接指针两种

  • 句柄访问对象
  • 使用句柄,需要在堆中划出一块内存作为句柄池,而reference中存储就是对象的句柄地址,而句柄中包含实例对象数据于类型数据各自的具体地址。
    JAVA虚拟机——对象的访问方式
  • 使用直接指针访问,那么Java堆对象的布局就必须考虑如何访问类型数据的相关信息、而reference中储存的直接就是对象地址

JAVA虚拟机——对象的访问方式

各自优点:

1,句柄访问对象方式 有稳定的句柄地址,在对象被移到时只改变句柄中的实例数据指针,而reference本身不改变。

2.直接指针访问对象方式  速度更快,节省了一次指针定位的时间开销。