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

栏目: IT技术 · 发布时间: 5年前

内容简介:在「对象内存布局」一节中,我们了解到对象头中包含了一个叫做由图中我们可以看到,在我们的堆中被划分出了一块单独的部分,叫做由上图中,我们可以看到,

前言

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

句柄

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

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

直接指针访问

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

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

对比

从稳定性上来说,句柄访问定位更胜一筹,因为在我们发生 GC 的时候,对象的实例数据指针会发生变化,而 reference 却不会发生任何的改变。

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

公众号

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


以上所述就是小编给大家介绍的《「每天五分钟,玩转 JVM」:对象访问定位》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

编程之美:微软技术面试心得

编程之美:微软技术面试心得

《编程之美》小组 / 电子工业出版社 / 2018-9 / 79

《编程之美:微软技术面试心得》收集了约60道算法和程序设计的题目,这些题目大部分在微软的笔试、面试中出现过,有的曾被微软员工热烈地讨论过。作者试图从书中各种有趣的问题出发,引导读者发现问题、分析问题、解决问题,寻找更优的解法。《编程之美:微软技术面试心得》内容分为以下几个部分。 游戏之乐:从游戏和其他有趣问题出发,化繁为简,分析总结。 数字之魅:编程的过程实际上就是和数字及字符打交道的......一起来看看 《编程之美:微软技术面试心得》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具