JVM 对象的访问方式

对象访问的方式

Java程序会通过栈上的reference数据来操作堆上的具体对象。

  • 句柄法

    Java堆中将可能会划分出一块内存来作为句柄池,reference中存储的就是对象的句柄地址,而句柄中包含了对象实例数据与类型数据各自具体的地址信息。移动的时候不需要改reference的地址

  • 直接指针法

    reference中存储的直接就是对象地址,如果只是访问对象本身的话,就不需要多一次间接访问的开销(跳过访问句柄),速度快

这两种对象访问方式各有优势。

使用句柄来访问的最大好处就是 reference 中存储的是稳定句柄地址,在对象被移动(垃圾收集时移动对象是非常普遍的行为)时只会改变句柄中的实例数据指针,而 reference 本身不需要被修改。

使用直接指针来访问最大的好处就是速度更快,它节省了一次指针定位的时间开销,由于对象访问在 Java 中非常频繁,因此这类开销积少成多也是一项极为可观的执行成本。

HotSpot 虚拟机主要使用直接指针来进行对象访问。

相关推荐
2501_937860941 小时前
Java多线程初阶(下)—— synchronized、volatile、wait/notify与经典并发工具
java·开发语言·jvm
二十雨辰5 小时前
[Java]-JVM面试题
java·开发语言·jvm
IT_Octopus6 小时前
G1 与 GC 日志入门课程(以本次离线菜单 Full GC 事故为教材)
java·jvm
疯狂打码的少年11 小时前
【数据库技术】关系代数连接运算(等值连接/自然连接/外连接)
jvm·数据库·笔记·oracle
ly76891 天前
Java 21 到 Java 26 新特性详解:虚拟线程、模式匹配、结构化并发、HTTP/3 与 AOT
java·jvm
我星期八休息1 天前
Linux I/O多路转接—epoll
java·linux·运维·服务器·开发语言·jvm·算法
wuminyu1 天前
Java FFM处理网络读写事件源码剖析
java·linux·c语言·jvm·c++
剑指offer.1 天前
Linux多任务-线程篇
java·jvm·算法
Zzzzmo_1 天前
JVM 知识整理
jvm
戴西软件1 天前
远程协同仿真是什么体验?
运维·jvm·人工智能·自动化·rpa