Java对象的访问定位技术

Java虚拟机规范中规定reference类型是一个指向对象的引用,但规定并没有定义这个引用应该通过什么方式去定位、访问堆中的对象的具体位置,所以对象访问方式取决于具体的虚拟机实现。

目前主流的访问方式有两种:使用句柄和直接指针。

使用句柄

如果使用句柄访问,Java堆中将会划分出一块内存来作为句柄池,reference中存储的就是对象的句柄地址,而句柄中包含了对象实例数据与类型数据各自的具体地址信息。

使用直接指针

如果使用直接指针访问,Java堆中对象的布局中就必须要考虑如何放置访问类型数据的相关信息,而reference中存储的直接就是对象地址。

对比

这两种访问方式各有优势,使用句柄的好处是reference中存储的是稳定的句柄地址,在对象被移动(垃圾回收时移动对象是非常普遍的行为)时只会改变句柄中的实例数据指针,而reference本身不需要修改。

使用直接指针节省了一次指针定位的时间开销,所以速度更快。由于Java对象的访问非常频繁,因此这类开销积少成多也是非常可观的执行成本。

HotSpot使用直接指针,但从整个软件开发的范围看,各种语言和框架使用句柄的情况也十分常见。

相关推荐
野生技术架构师2 分钟前
Tomcat Service的设计和实现:StandardService
java·tomcat
2401_831419449 分钟前
Python分类汇总怎么做_Crosstab交叉表与多条件联合频数频率统计
jvm·数据库·python
2301_7873124311 分钟前
Go语言怎么用channel做信号通知_Go语言channel信号模式教程【完整】
jvm·数据库·python
Gofarlic_OMS12 分钟前
UG/NX许可证管理高频技术问题解答汇编
java·大数据·运维·服务器·汇编·人工智能
逐星ing16 分钟前
IDEA 无法识别 `mvn install` 最新 SNAPSHOT 依赖的根因与完整解决方案
java·ide·intellij-idea
2301_8180084417 分钟前
如何删除ASM中的数据文件_ALTER DISKGROUP DROP FILE彻底清除
jvm·数据库·python
流觞 无依24 分钟前
Spring Boot 未授权访问漏洞排查与修复指南
java·spring boot·后端
Java开发的小李26 分钟前
SpringBoot 高流量高并发 基础全面讲解
java·spring boot·后端·性能优化
2401_8987176631 分钟前
mysql如何进行全量数据库备份_mysqldump工具的使用技巧
jvm·数据库·python
随风,奔跑31 分钟前
Spring Cloud Alibaba(六)-链路追踪SkyWalking
java·后端·spring·skywalking