【jvm】java对象的访问定位

目录

          • [1. 说明](#1. 说明)
          • [2. 使用句柄](#2. 使用句柄)
            • [2.1 概述](#2.1 概述)
            • [2.2 结构](#2.2 结构)
            • [2.3 优点](#2.3 优点)
            • [2.4 缺点](#2.4 缺点)
          • [3. 使用直接指针](#3. 使用直接指针)
            • [3.1 概述](#3.1 概述)
            • [3.2 结构](#3.2 结构)
            • [3.3 优点](#3.3 优点)
            • [3.4 缺点](#3.4 缺点)
          • [4. 实际应用](#4. 实际应用)
1. 说明
  • 1.在Java中,对象的访问定位主要依赖于对象的引用。
  • 2.Java虚拟机(JVM)规范中规定reference类型是一个指向对象的引用,但并未定义这个引用应如何具体定位、访问堆中的对象。
  • 3.对象的访问方式取决于具体的虚拟机实现
  • 4.目前主流的访问方式主要有两种:使用句柄直接指针
2. 使用句柄
2.1 概述
  • 1.在使用句柄的访问方式中,Java堆会被划分为两部分:一部分用于存放对象实例数据 ,另一部分则用于存放对象实例数据的地址 (或称为句柄)。
  • 2.在Java虚拟机中,引用(reference)实际上是指向句柄的引用,而不是直接指向对象的引用。
2.2 结构
  • 1.句柄是一个间接指针,它包含了对象实例数据与类型数据各自的具体地址信息。
  • 2.当需要访问对象时,JVM会首先通过引用找到句柄,然后再通过句柄找到对象实例数据和类型数据。
2.3 优点
  • 1.使用句柄的好处在于,当对象在堆中被移动(如垃圾回收时移动对象)时,只需改变句柄中的实例数据指针,而引用本身不需要修改。
  • 2.这提供了对象实例数据被移动和重分配的灵活性。
2.4 缺点
  • 1.句柄方式的缺点是增加了一次间接访问的开销,即需要先通过引用找到句柄,再通过句柄找到对象实例数据。
  • 2.这可能会降低程序的执行效率。
3. 使用直接指针
3.1 概述
  • 1.在使用直接指针的访问方式中,对象实例数据直接存放在Java堆中 ,而引用则直接指向对象实例数据的地址
  • 2.HotSpot虚拟机使用的是直接指针方式来进行对象的访问定位。
3.2 结构
  • 1.在这种访问方式下,Java堆中对象的布局需要考虑如何放置访问类型数据的相关信息。
  • 2.引用中存储的是对象实例数据的直接地址。
3.3 优点
  • 1.使用直接指针可以节省一次指针定位的时间开销,因此速度更快。
  • 2.由于Java对象的访问非常频繁,这种开销的减少对于提高程序执行效率具有重要意义。
3.4 缺点
  • 1.使用直接指针的缺点是,当对象实例数据的地址发生变化时(虽然这种情况在Java中较少见),需要特殊处理移动对象实例数据的情况。
  • 2.在进行垃圾收集时,也需要对对象引用进行特殊处理以确保正确性。
4. 实际应用
  • 1.目前大多数Java虚拟机(如HotSpot)采用的是直接指针方式。
  • 2.这是因为随着硬件的发展和虚拟机技术的进步,间接访问的开销已经可以被忽略不计,而直接指针方式能够带来更高的执行效率。
  • 3.在某些特定场景下(如需要频繁移动对象实例数据的场景),使用句柄可能会更加合适。
相关推荐
程序猿202311 小时前
MAT(memory analyzer tool)主要功能
jvm
期待のcode14 小时前
Java虚拟机的非堆内存
java·开发语言·jvm
jmxwzy18 小时前
JVM(java虚拟机)
jvm
Maỿbe18 小时前
JVM中的类加载&&Minor GC与Full GC
jvm
人道领域19 小时前
【零基础学java】(等待唤醒机制,线程池补充)
java·开发语言·jvm
小突突突19 小时前
浅谈JVM
jvm
饺子大魔王的男人21 小时前
远程调试总碰壁?局域网成 “绊脚石”?Remote JVM Debug与cpolar的合作让效率飙升
网络·jvm
天“码”行空1 天前
java面向对象的三大特性之一多态
java·开发语言·jvm
独自破碎E2 天前
JVM的内存区域是怎么划分的?
jvm
期待のcode2 天前
认识Java虚拟机
java·开发语言·jvm