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

 

如下一句代码:

  Object obj = new Object();

image

 

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

 

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

 

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

 使用句柄

wps_clip_image-12506

 

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

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

 

直接使用指针

 

wps_clip_image-13159

 

 

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

 

 

各自的优势比较:

 

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

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

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2014-03-02 18:47  饮露秋林  阅读(247)  评论(0编辑  收藏  举报