二、在java中,对象是如何访问的呢? --- 对象的访问

如下一句代码:

  Object obj = new Object();

image

可以用一图表明:对象的引用放到了栈 里,对象的实例存储在堆里。

引用类型只规定了一个指向对象的引用。那它是如何通过这个引用找到在java堆中对象的实例呢?

不同的虚拟机有不同的方式。主流的有两种:

 使用句柄

wps_clip_image-12506

在java堆中开辟了一块内存作为句柄池。reference 类型存储的是对象的句柄地址,

句柄中包含了对象实例的指针。

直接使用指针

wps_clip_image-13159

可以看到的是reference 中直接就存储了对象的地址。

各自的优势比较:

  一、句柄方式最大的好处就是在对象改变位置的时候(这种情况在垃圾回收时是常有的),reference的句柄地址不需要改变。只会更改句柄的对象实例的指针。

二、直接使用指针最大的好处就是速度更快。因为它可以一步定位到实例对象。

就大范围使用情况来说,直接使用指针的方式是十分常见的。

原文地址:https://www.cnblogs.com/pan2011/p/3577143.html