专栏首页JVMGCJAVA的对象访问定位
原创

JAVA的对象访问定位

创建对象是为了访问对象,Java程序通过栈的引用(reference)数据来操作堆上的对象。由于reference类型在Java虚拟机规范中只规定了一个指向对象的引用。并没有规定通过该引用怎么定位,访问堆中的对象。具体需要看虚拟机的实现。

两种访问方式:

  • 句柄访问
  • 直接访问

句柄访问

Java堆中会划分一个句柄池,reference存储的就是对象的句柄地址,而句柄中存放的是对象的实例数据和类型数据的地址信息。

image-20201023232424966

直接访问

Java堆对象布局就必须考虑如何存放访问类型数据的相关信息,reference存储的就是对象的地址。

image-20201023232718060

句柄访问和直接访问的特点

  • 句柄访问:reference存放的是句柄地址(比较稳定),在对象移动时(垃圾回收),只会改变句柄中实例数据的地址,而reference无需改变。
  • 直接访问:由于节省了一次指针开销访问速度比较快,由于对象的访问在Java堆上访问特别频繁。Sun HotSpot虚拟机采用的是直接访问。
wx.jpg

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • java 对象的访问定位

    建立对象就是为了使用对象,我们的Java程序需要通过栈上的reference 数据来操作堆上的具体对象。由于reference类型在Java虚拟机中只规定了一个...

    爱明依
  • 五、Java对象的访问定位

    Java对象在访问的时候,我们需要通过java虚拟机栈的reference类型的数据去操作具体的对象。由于reference类型在java虚拟机规范中只规定了一...

    栋先生
  • 五、对象的结构、对象的访问定位

               对象指向元数据的指针,虚拟机通过这个指针来确定对象是那个类的实例

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

    简述 今天继续写《深入理解java虚拟机》的对象创建的理解。这次和上次隔的时间有些长,是因为有些东西确实不好理解,就查阅各种资料,然后弄明白了才来做记录。 (此...

    纪莫
  • 「每日五分钟,玩转 JVM」:对象访问定位

    博主表示看到有人这么说内心真的很激动,能对大家有所助益就是我原创最大的动力!另外官宣一下,博主考试结束,正式回归发文状态!以后每周不定期更新1-2篇,敬请大家多...

    山禾说
  • Java虚拟机--对象的访问

    贾博岩
  • 【JVM从小白学成大佬】6.创建对象及对象的访问定位

    《JVM从小白学成大佬》系列推出到现在,收到了很多小伙伴的好评,也收到了一些小伙伴的建议,在此表示感谢。

    猿人谷
  • 浅谈对象的创建、内存布局和访问定位

      这里的对象的创建是指普通的对象(不包括数组和Class对象)。对象的创建简单来说就是执行new的时候,虚拟机做出对应的响应。让我们看看一下虚拟机创建对象的过...

    GreizLiao
  • JVM:全面解析Java对象的创建、内存布局 & 访问定位流程

    由于引用类型数据(reference)在 Java虚拟机中只规定了一个指向对象的引用,但没定义该引用应该通过何种方式去定位、访问堆中的对象的具体位置

    Carson.Ho
  • JVM性能调优-Java程序员不可不知的对象访问定位⽅式

    cwl_java
  • Java常用工具类之自定义访问对象

    package com.wazn.learn.util; import javax.servlet.http.HttpServletRequest; /...

    二十三年蝉
  • jvm对象的访问

    在 HotSpot虚拟机中,对象在内存中存储的布局分为三块区域:对象头,实例数据,和对齐填充。

    海向
  • 对象实例化内存布局与访问定位 Krains 2020-08-14

    虚拟机遇到一条new指令,首先去检查这个指令的参数能否在Metaspace的常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已经被加载,解析和初...

    Krains
  • 页面对象的定位

    在自动化的测试中,对象元素的定位和操作是自动化的核心部分,但是对象是定位是自动化的基础,在对象的基础上,才可以形成对对象的操作。

    无涯WuYa
  • Java多线程——对象及变量的并发访问

    Java多线系列文章是Java多线程的详解介绍,对多线程还不熟悉的同学可以先去看一下我的这篇博客Java基础系列3:多线程超详细总结,这篇博客从宏观层面介绍了多...

    说故事的五公子
  • Java虚拟机值对象访问以及如何使用对象的引用(2)

    对象访问在 Java 语言中无处不在,是最普通的程序行为,但即使是最简单的访问,也会却涉及 Java 栈、 Java 堆、方法区这三个最重要内存区域之间的关联关...

    Java后端技术
  • 数据访问对象模式

    数据访问对象模式Data Access Object Pattern即DAO模式,用于把低级的数据访问API或操作从高级的业务服务中分离出来,准确来说数据访问对...

    WindrunnerMax
  • 用 globalThis 访问全局对象[每日前端夜话0xF6]

    JavaScript 语言越来越被广泛地用于各种环境中。除了 Web 浏览器(这是 JavaScript 的最常见的宿主环境类型)之外,你还可以在服务器,智能手...

    疯狂的技术宅
  • Vuex中的state访问状态对象

    state ,这个就是我们说的访问状态对象,它就是我们SPA(单页应用程序)中的共享值。

    wust小吴

扫码关注云+社区

领取腾讯云代金券