建立对象是为了使用对象,我们的Java程序需要通过栈上的reference数据来操作堆上的具体对象。由于reference类型在Java虚拟机规范中之规定了一个指向对象的引用,并没用定义这个引用因该通过何种方式去定位、访问队中的对象的具体位置,所以对象的访问方式也是通过虚拟机实现而定的。
访问方式分类:
1、直接指针:
reference 中存储的直接就是对象地址,对象实例数据中有一块区域存储对象的类型数据。
2、对象句柄:
reference中存储的是对象的句柄信息,句柄包含对象的实例数据和对象类型数据的地址信息。
直接指针:
优点:速度更快,节省了一次指针定位的开销;
缺点:在对象需要进行移动时,需要修改reference的地址信息。
对象句柄:
优点:在对象进行移动时,只需要修改句柄中实例数据指针;
缺点:由于需要对对象实例数据和对象类型数据进行两次定位,速度比直接指针较慢。