深入理解Java虚拟机(5)--对象的访问定位

时间:2023-01-02 14:19:51

建立对象是为了使用对象,我们的Java程序需要通过栈上的reference数据来操作堆上的具体对象。由于reference类型在Java虚拟机规范中之规定了一个指向对象的引用,并没用定义这个引用因该通过何种方式去定位、访问队中的对象的具体位置,所以对象的访问方式也是通过虚拟机实现而定的。

访问方式分类:

1、直接指针:
reference 中存储的直接就是对象地址,对象实例数据中有一块区域存储对象的类型数据。

深入理解Java虚拟机(5)--对象的访问定位

2、对象句柄:
reference中存储的是对象的句柄信息,句柄包含对象的实例数据和对象类型数据的地址信息。

深入理解Java虚拟机(5)--对象的访问定位

直接指针:

优点:速度更快,节省了一次指针定位的开销;
缺点:在对象需要进行移动时,需要修改reference的地址信息。

对象句柄:

优点:在对象进行移动时,只需要修改句柄中实例数据指针;
缺点:由于需要对对象实例数据和对象类型数据进行两次定位,速度比直接指针较慢。