Java 中对象的访问定位

1,522 阅读2分钟

Java 中对象的访问定位

几日不见,甚是想念。今天继续来研究Java中对象的访问定位,主要涉及到java栈及堆中的一些定义,结合着图片我们一起探究下。

  1. java通过栈中的reference数据来操作堆中的具体对象 java中没有明确规定reference数据应该怎样去引用,所以接下来讲讲常见的两种reference访问方式:句柄和直接指针方式

  2. 句柄方式

通过句柄访问对象 image.png 当使用句柄方式访问堆中的对象时,java堆中会划分出一块内存区域,reference中存储的就是句柄的地址,而句柄中包含了对象的实例数据与类型数据各自的地址信息。

  1. 直接指针方式

通过直接指针访问对象

image.png 当使用直接指针方式访问堆中的对象时,java堆中需要考虑如何放置对象的实例数据,reference中存储的直接就是对象地址。如果只是访问对象的话,就不需要多一次间接访问的开销。

4.优劣对比

这两种方式各有优劣,使用句柄方式访问对象时,reference中存储的就是稳定的句柄地址,对象被移动时,只需要修改句柄中实例对象的指针(在垃圾回收中,对象地址改变非常普遍)。

使用直接指针方式访问对象时,最大的优点就是速度更快。在java中对于对象的访问非常频繁,积少成多也是一笔巨大的开销,HotSpot中使用的就是这种方式。

本期文章内容不多,不过涉及到的东西比较底层,分享出来与大家共勉,共同前行!