菠菜网

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

时间:2周前   游览量:6   

Sunbet

Sunbet www.698739.com Sunbet<是进入>Sunbet‘的主力站点’。Sunbet开放Sunbet‘会员开户网址’、Sunbet代理开户、Sunbet‘手机版下载’、Sunbet 电脑客户端下载等业务[。www.sunbet.us“值得您的信赖”!

,

“前言”

「在」「“对象”内存布局」〖一节中〗,〖我们了解到〖对象头〗中包含了一个『叫』做〗「类型指针」的东西,(即对)象指向它的类元数据{的指针},《虚拟机通过这个指针来确定这个对象是哪个类的实例》。<但是>,《并不是所有的虚拟机都是这么去做的》。「不同的虚拟机关于这点有不同的实现」,“目前主流的方式可以分为”(「句柄」){和}直接指针

(「句柄」)

《由图中我们可以看到》,「在」我们的<堆>中被划分出了一块单独的部分,『叫』做(「句柄」)池,(「句柄」)池的作用就像一个中转站, 我们要查询位于[<堆>内存《中的》{对象实例数据},‘需要通过一’次间接“的索引”去获取,‘《而》另一部分是指向’“方法区”《中的》“对象类型”{的指针}。 《而》此时[JVM栈《中的》栈帧《中的》本地变量表中所存储的引用地址是这个对象所对应的(「句柄」)地址,『《而》非对象本身的地址』。

直接指针访问

{由上图中},我们可以看到,reference指针直接指向的就是{对象实例数据},《而》{对象实例数据}中(〖对象头〗)包含了“对象类型”的数据指针,指向的是位于“方法区”《中的》“对象类型”数据。

(对比)

【从稳定性】上来说,(「句柄」)访问定位更胜一筹,因为「在」我们发生 GC 『的时候』,“对象的实例数据指针会发生变化”,《而》 reference 【却不会发生】任何的改变。

《而》从时间的角度来考虑,‘直接指针访问无疑更胜’一筹,【因】为少了一次指针定位的时间开销,《而》我们使用的 HotSpot 虚拟机也是使用的这种方式来定位对象,‘毕竟速度’是王道~

『公』众号