JVM——9.对象的访问定位方式

news/2024/7/7 18:49:37

前一篇文章,我们详细的了解了对象在堆内存中是如何分配的。现在,对象已经分配好了,那么要如何访问定位呢?下面,我们一起来了解一下。

目录

1.概述

2.句柄法

3.直接指针法

4.小结


1.概述

创建对象是为了使用该对象,Java程序会通过栈上的reference数据来操作堆上的具体对象。由于reference类型在《Java虚拟机规范》里面只规定了它是一个指向对象的引用,并没有定义这个引用应该通过什么方式去定位、访问到堆中对象的具体位置,所以对象访问方式也是由虚拟机实现而定的,主流的访问方式主要有 使用句柄 和 直接指针 两种。

2.句柄法

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

优点:reference存储的是稳定的句柄地址,在对象被移动(垃圾收集时移动对象是非常普遍的行为)时只会改变句柄中的实例数据指针,而reference本身不需要改变。

缺点:增加了一次指针定位的时间开销。

3.直接指针法

reference中存储的直接就是对象地址,如果只是访问对象本身的话,就不需要多一次间接访问的开销。对象实例数据中有指向对象类型数据的指针。

优点节省了一次指针定位的开销。

缺点在对象被移动时reference本身需要被修改。

4.小结

本篇文章主要介绍了JVM定位访问对象的两种方式,要掌握。


http://lihuaxi.xjx100.cn/news/1554923.html

相关文章

MongoDB——将时间戳转换为日期

在 MongoDB 中将时间戳转换为日期 从 timestamp 转换为日期取决于我们保存时间戳的类型。它是对象、数字还是字符串类型? 我们可以在 mongo shell 上使用以下命令检查字段的类型。在本教程中,我们将学习如何将时间戳转换为数字、字符串或对象类型的日期…

计算机网络分类

按照覆盖范围分类 (1)个域网:通常覆盖范围在1~10m。 (2)局域网:通常覆盖范围在10m~1km。 (3)城域网:覆盖范围通常在5~50 km 。 &…

【Java 基础篇】Java 标准输出流详解:输出你的程序之美

Java 编程中,标准输出流是一个重要的概念。它允许我们将程序的输出信息显示在终端或控制台上,这对于调试、用户界面和与用户的交互非常重要。在这篇文章中,我们将深入探讨 Java 的标准输出流,了解如何使用它以及一些常见的用法和技…

数据库----数据查询

1.6 查询语句 语法:select [选项] 列名 [from 表名] [where 条件] [group by 分组] [order by 排序][having 条件] [limit 限制]1.6.1 字段表达式 mysql> select 锄禾日当午; ------------ | 锄禾日当午 | ------------ | 锄禾日当午 | ---…

3288S Android11 适配红外遥控功能(超详细)

目录 一、rk3288平台红外遥控介绍二、原理图分析三、配置设备树并使能红外遥控功能四、打开红外打印功能,查看红外遥控的用户码和键值五、将查看到的红外遥控用户码和键值添加到设备树和.kl文件六、Android红外遥控.kl文件映射知识和使用添加新的.kl文件七、补充&am…

async和await的用法

定义 async的定义 在mdn中,async的定义为: async function 关键字可用于定义表达式中的异步函数。 其实很简单,就是async关键字后面定义的函数会被转化为一个异步的函数 如下所示: function fn1(){return 同步}async function asyncFn(){return 异步}console.log(fn1())con…

苹果笔不用原装可以吗?好用的平板触控笔

由于Apple pencil的出世,给许多小伙伴带了很高的生产效率。但Apple pencil的昂贵,让许多小伙伴连连劝退,觉得只是偶尔写字,没有必要入手一支这么昂贵的笔,咱们国内也会很多做得相当不错的平替电容笔,但很多…

ElementPlus里的类型别名声明及使用

前言 最近刚开始使用ts,定义的变量总是不知道类型,特别是第三方库中,更是不知道有哪些类型,笨人本办法,遇到一个就记录一下,方便我下次使用查询 组件实例 我们通过组件的ref属性获取组件实例时,…