我们前面有说过一个对象是如何创建的,那么创建之后具体怎么使用呢?
- Java程序会通过栈上的reference数据来操作堆上的具体对象
reference类型里面只规定了它是一个指向对象的引用,并没有定义引用应该通过什么方式去定位、访问到堆中对象的具体位置,随意对象访问方式也是由虚拟机来规定/
reference类型主流的访问方式
- 使用句柄访问
- Java堆中就会分配一块内存作为句柄池,reference中就是存放的句柄池地址
-
句柄池包括了:到对象实例的数据指针、到对象类型数据的指针的地址信息
通过句柄访问对象
- 使用指针访问
- Java堆中对象的内存布局需要考虑放置访问类型数据的信息
- reference中存储的直接是对象地址
-
访问对象本身,就可以直接访问,减少间接访问开销。
通过直接指针访问对象
总结:
句柄池访问
优点:稳定(由于存储的是句柄地址,在对象被移动时,只会改变句柄中实例数据指针,而reference本身不需要修改)
直接指针访问:
优点:速度快,(由于对象访问在Java中非常频繁,减少类似开销是及为可观的成本。HotSpot虚拟机使用的就是这种)
网友评论