Hotspot虚拟机,对象的访问定位

正如在对象的内存布局中对象头的类型指针部分的描述,查找对象的元数据信息并不需要经过对象本身

Java程序通过栈上的reference数据来操作堆上的具体对象,而对象的访问取决于虚拟机的具体实现。目前主流的访问方式有两种:

  • 句柄
  • 直接指针

句柄

使用句柄访问时,Java堆总将会划分出一块内存来作为句柄池,reference中存储的就是对象的句柄地址,而句柄中包含了对象实例数据与类型数据各自的具体地址信息。

直接指针

使用直接指针访问,reference中存储的直接就是对象地址。


两种方式各有优势,使用句柄来访问的好处就是reference中存储的是稳定的句柄地址,在对象被移动时(垃圾回收时经常发生)只会改变句柄中的实例数据指针,而reference本身不需要修改。
使用直接指针访问的优势,便是速度快,它会节省一次指针定位的时间开销。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容