【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.在某些特定场景下(如需要频繁移动对象实例数据的场景),使用句柄可能会更加合适。
相关推荐
m0_715575342 小时前
使用PyTorch构建你的第一个神经网络
jvm·数据库·python
Word码3 小时前
[C++语法] 继承 (用法详解)
java·jvm·c++
野犬寒鸦5 小时前
从零起步学习JVM || 第一章:类加载器与双亲委派机制模型详解
java·jvm·数据库·后端·学习
符哥200810 小时前
C++ 进阶知识点整理
java·开发语言·jvm
夕除10 小时前
js--15
java·jvm·spring
4311媒体网12 小时前
C语言操作符全解析 C语言操作符详解
java·c语言·jvm
猫头虎1 天前
如何排查并解决项目启动时报错Error encountered while processing: java.io.IOException: closed 的问题
java·开发语言·jvm·spring boot·python·开源·maven
wgslucky1 天前
jdk17 配置jvm参数中gc的日志及控制日志数量和大小
jvm·gc·-xlog
痴儿哈哈1 天前
自动化机器学习(AutoML)库TPOT使用指南
jvm·数据库·python
野犬寒鸦1 天前
从零起步学习并发编程 || 第七章:ThreadLocal深层解析及常见问题解决方案
java·服务器·开发语言·jvm·后端·学习