JVM笔记5-对象的访问定位。

Posted 妮蔻

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JVM笔记5-对象的访问定位。相关的知识,希望对你有一定的参考价值。

java虚拟机中指定一个栈内存的引用指向了堆内存中的对象。这样说只是笼统的说法。而指向堆内存中的对象就一定是栈引用所需要的那个对象吗?其实并不定。

这就需要知道对象的访问定位方式有两种:

  1.使用句柄。所谓的句柄其实就是堆内存中分配一块内存记录对象实例的指针和对象类型数据的指针,而对象类型数据区域是在方法区中的。这样栈引用第一步先指向堆中

  的句柄。第二步根据句柄中的对象实例的指针和对象类型数据的指针找到对应的对象实例和其类型数据。虽然这里用了两步,必然对于使用直接指针来说,效率必然会慢。因为

  这里经过两步才找到对应的对象实例和其类型数据。但是这样的好处就是如果对象实例和其类型数据的指针变动很频繁,变动的只是堆中的句柄,而栈的引用却不用变动。

  2.使用直接指针:直接指针就是,在栈引用中直接根据对象实例的指针和对象类型数据的指针找到对应的对象实例和其类型数据。只需要用一步就可以找到对应的对象实例和其类型数据。

  对于很多对象的 访问定位来说,减少了一次寻址,这必然效率很高,性能很好。

 

 

HotSpot虚拟机则是使用直接指针的方式对对象的访问定位。

以上是关于JVM笔记5-对象的访问定位。的主要内容,如果未能解决你的问题,请参考以下文章

JVM-对象的实例化内存布局与访问定位

读《jvm虚拟机》 - 对象的访问定位

Day335.对象的实例化内存布局与访问定位直接内存 -JVM

「每天五分钟,玩转 JVM」:对象访问定位

JVM之对象的实例化内存布局与访问定位

jvm学习记录-对象的创建对象的内存布局对象的访问定位