主流的访问方式有使用句柄和直接指针两种:
句柄访问
如果使用句柄访问的话 , Java堆中将会划分出一块内存来作为句柄池 , reference中存储的就是对象的句柄地址 , 而句柄中包含了对象实例数据与类型数据的具体各自的地址信息 。
文章插图
指针访问对象
使用直接指针访问的话 , Java堆对象的布局中就必须考虑如何放置访问类型数据的相关信息 , reference中存储的直接就是对象地址 。
文章插图
这两种对象访问方式各有优势 , 使用句柄来访问的最大好处就是reference中存储的是稳定句柄地址 , 在对象被移动(垃圾收集时移动对象是非常普遍的行为)时只会改变句柄中的实例数据指针 , 而reference本身不需要被修改 。
使用直接指针来访问最大的好处就是速度更快 , 它节省了一次指针定位的时间开销 , 由于对象访问的在Java中非常频繁 , 因此这类开销积小成多也是一项非常可 观的执行成本 。从上一部分讲解的对象内存布局可以看出 , 就虚拟机HotSpot而言 , 它是使用第二种方式进行对象访问 , 但在整个软件开发的范围来看 , 各种 语言、框架中使用句柄来访问的情况也十分常见 。
本文主要参考《深入理解Java虚拟机:JVM高级特性与最佳实践》后的学习笔记及总结 。
推荐阅读
- 如何在CentOS/RHEL 7上借助ssm管理LVM卷?
- Redis内存分析工具--rdr安装与使用
- 招聘|国有企业职业经理人团队任期制和契约化管理的难点与解决之道
- IT管理者应该了解的四项开源工具
- 4个层面,让你学会向上管理,赢得升职加薪的正确姿势
- 荣耀|千元5G手机也有“10GB”大内存!荣耀Play6T明日开售:1199元起
- 星级酒店管理须知
- web/vue/react/ng后台管理系统前端开发,富文本编辑器没个省心的
- Linux管理基础命令"tr"你用过吗?
- 分享一款Docker可视化管理工具DockerUI