JVM 知识-- 指针、引用和句柄
本文最后更新于:12 天前
⚡指针
指针是对象在内存中的地址
⚡引用 (Reference)
对象的引用是创建对象时的返回值,即 new 表达式的返回值。
new A();
这里真正创建了一个对象,但我们没有用句柄去持有(hold,拿着,保存)该引用。Handle 是变量,Reference 是一种变量值。
⚡句柄 (Handle)
句柄是指针的指针
⚡对象句柄
A a = new A();
a 就是对象句柄
new A();
返回值是对象引用
a = new A()
完成了 句柄=引用
的过程,即句柄的初始化
⚡JVM 中对象访问句柄 (JVM 底层实现)
通过引用有两种访问对象的方式:
-
通过对象句柄访问
JVM 会在
堆
中划分一个句柄池
,引用存储的就是在句柄池中一个句柄的地址,而这个句柄包含了对象的实例数据和类型数据的具体地址。使用这种方式最大的好处在于,如果对象在垃圾回收器不断回收后被移动到了其他地方,句柄本身不会改变,只需要改变句柄中实例数据的指针,提高了垃圾回收的效率
-
直接指针访问
引用存储的就是对象的地址,相比上个放法节省了一次指针定位的时间开销。
HotSpot 是使用直接指针的方式访问的
本博客所有文章除特别声明外,均采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 。转载请注明出处!