JVM学习系列之对象访问的两种方式句柄和直接指针
2019独角兽企业重金招聘Python工程师标准>>>
使用Java开发的人都清楚在Java中对象引用作用类似C++中指针,通过对象引用定位对象,但是具体在JVM中又是采用什么方式去定位堆中对象的具体位置,大部分人都不太了解,这里我们讲述下不同Java虚拟机主要使用的两种对象访问方式,句柄访问和直接指针访问。
1 - 句柄访问
图1-1
虚拟机如果使用句柄访问方式,Java堆中首先会划分出一块内存作为句柄池,这时候对象引用reference存储的就是对象的句柄地址而不是作为对象指针指向堆中对象的地址,而句柄池中的对象实例包含指向对象实例数据和类型数据的指针,采用句柄访问方式要获得完整的对象信息需要进行三次指针定位。
2 - 直接指针访问
直接指针访问对象,Java虚拟机需要在堆中为对象分配额外的空间存储指向方法区对象类型数据的指针,采用直接指针访问方式,对象引用直接存储堆中对象的地址,只需要进行两次指针定位。目前hot spot就是采用这种对象访问方式。
3 - 两种对象访问方式对比
两种方式各有优劣,使用句柄访问的好处是在每次对象位置发生变动时只需要改变句柄中指向实例数据的指针,而指向对象类型数据的指针和对象引用指针reference都不需要修改,而使用直接指针访问,当对象发生移动时对象引用reference需要修改。但是使用直接指针访问方式少了一次指针定位的时间开销速度更快。
转载于:https://my.oschina.net/zhangyq1991/blog/1921101
JVM学习系列之对象访问的两种方式句柄和直接指针相关推荐
- Vue系列vue-router的参数传递的两种方式(五)
Vue系列vue-router的参数传递的两种方式 前言 一.编写Profile页面 二.编写App.vue入口 三.路由配置,index.js 四.对比route.params方式传参 五.项目中 ...
- Spring系列之AOP实现的两种方式
Spring只支持XML方式而没有实现注解的方式(也叫AspectJ方式)的AOP,所以要使用@Aspect注解,只能引入AspectJ相关的 jar 包: aopalliance-1.0.jar 和 ...
- Springboot中数据库访问的两种方式之-JdbcTemplate
目录 01.写在前面 02.项目依赖 03.创建模型脚本 04.读取数据库 05.Controller 06.开始测试 本文由bingo创作,授权我原创发布. Tiger和他朋友们的原创技术文章,请关 ...
- struts2学习之表单校验的两种方式
基于覆盖validate方法的表单校验 Action类一般都继承ActionSupport类. 通过覆盖ActionSupport类的validate方法即可在自己的Action类中校验输入项的值. ...
- redis 未授权访问利用 两种方式
1.未授权访问漏洞 Redis在默认情况下,会绑定在0.0.0.0:6379,如果没有采用限制IP访问,就会将Redis服务暴露在公网上,并且在没有设置密码认证的情况下,会导致任意用户未授权访问Red ...
- Nginx部署静态页面及引用图片有效访问的两种方式
nginx安装百度一下有很多,直接正题: 静态文件目录结构 file#文件位置 /home/service/file/ css js images html fonts 配置nginx.conf核心代 ...
- java并行任务,Java 并发编程学习(五):批量并行执行任务的两种方式
Java 并发编程学习(五):批量并行执行任务的两种方式 背景介绍 有时候我们需要执行一批相似的任务,并且要求这些任务能够并行执行.通常,我们的需求会分为两种情况: 并行执行一批任务,等待耗时最长的任 ...
- java匿名启动线程_使用匿名内部类:来创建线程的两种方式
[Java]基础31:创建线程的两种方式 谢谢你的观看. 今天是我自学Java的第31天. 你的观看便是对我最大的鼓励. 话不多说,开始今天的学习: 线程的创建有两种方式,昨天学习过其中的一种: 创建 ...
- QtCreator与catkin命令两种方式开发ROS程序(图示加代码)
QtCreator与catkin命令两种方式开发ROS程序(图示加代码) 一.Qt Creator安装及开发ROS 1.安装Qt Creator 2.使用Qt Creator开发ROS 1.创建工作空 ...
- Java面试题:synchronized和对象的访问定位的两种方式
说一说自己对于 synchronized 关键字的理解 ? synchronized关键字解决的是多个线程之间访问资源的同步性,synchronized关键字可以保证被它修饰的方法或者 代码块在任意时 ...
最新文章
- 用户home目录下的.gitconfig 和 库文件夹目录下的 .gitignore 示例
- 动态编译真有用武之地?
- Linux关于文件的权限笔记
- 千位分隔符的完整攻略
- linux调用堆栈函数,使用 backtrace 获得 Linux 函数调用栈
- jQuery页面加载事件
- Unity3D脚本访问与参数传递
- 计算机桌面如何分区,讲解电脑如何分区
- 计算机硬件和维护的论文,浅谈计算机的硬件维护论文
- linux测试硬盘读写速度
- C语言 一元二次方程求解
- 密西根州立大学计算机qs分数,2020年密歇根州立大学QS世界排名
- history linux 位置,Linux基础知识之history的详细说明
- 热烈祝贺|酒事有鲤盛装亮相2023中国(山东)精酿啤酒产业发展创新论坛暨展览会
- 获取UNIX系统时间
- python金融分析小知识(30)——比较常见的pd.set_option的使用
- 【程序】Marvell 88W8801 WiFi模块创建或连接热点,并使用lwip2.1.2建立http服务器(20200208版)
- 如何取消百度网盘自动登录状态?
- 四大游览器兼容问题综合实例
- KAFKA源码阅读——FetchRequestPurgatory, ProducerRequestPurgatory
热门文章
- c#服务器上的文件怎么打印机,如何通过使用C#窗口服务通过打印机打印数据打印文本文件...
- 青云oracle,青云oracle工具下载
- 语法高亮_Qt官方示例语法高亮器
- mysql数据库导入视图表失败_一个mysqldump导出失败的案例分析
- vba动态二维数组_VBA学习笔记19:数组1
- systemctl start named失败的解决方法_有关平安银行的提额方法和提额失败的解决方法...
- linux系统u盘安装7.2,U盘安装CentOS 7系统的方法
- centos添加普通用户
- Boot2Docker 安装运行出现客户端与服务端版本不一致的解决办法
- 暗渡陈仓:用低消耗设备进行破解和渗透测试2.3 本章小结