JVM14_Class文件结构细节、魔数、Class文件版本、常量池、访问标识(或标志)、类索引|父类索引|接口索引集合、字段|方法|属性表集合(三)

简介: ④. 字面量和符号引用⑤. 符号引用、直接引用的理解?⑥. 常量类型和结构

④. 字面量和符号引用


  • ①. 常量池主要存放两大类常量:字面量(Literal)和符号引用(Symbolic References)。如下表:


微信图片_20220107132700.png


②. 全限定名


(com/xiaozhi/test/Demo这个就是类的全限定名,仅仅是把包名的".“替换成”/",为了使连续的多个全限定名之间不产生混淆,在使用时最后一般会加入一个“;”表示全限定名结束)


③. 简单名称


(简单名称是指没有类型和参数修饰的方法或者字段名称,上面例子中的类的add()方法和num字段的简单名称分别是add和num)


③. 描述符


1. 描述符的作用是用来描述字段的数据类型、方法的参数列表(包括数量、类型以及顺序)和返回值。根据描述符规则,基本数据类型(byte、char、double、float、int、long、short、boolean)以及代表无返回值的void类型都用一个大写字符来表示,而对象类型则用字符L加对象的全限定名来表示,详见下表: (数据类型:基本数据类型 、 引用数据类型))


2. 用描述符来描述方法时,按照先参数列表,后返回值的顺序描述,参数列表按照参数的严格顺序放在一组小括号“()”之内。如:


方法java.lang.String toString()的描述符为() Ljava/lang/String;,


方法int abc(int[] x, int y)的描述符为([II) I。


微信图片_20220107132721.png


⑤. 符号引用、直接引用的理解?


①. 虚拟机在加载Class文件时才会进行动态链接,也就是说,Class文件中不会保存各个方法和字段的最终内存布局信息,因此,这些字段和方法的符号引用不经过转换是无法直接被虚拟机使用的。当虚拟机运行起来时,需要从常量池中获得对应的符号引用,再在类加载过程中(初始化阶段)将其替换直接引用,并翻译到具体的内存地址中


②. 符号引用:符号引用以一组符号来描述所引用的目标,符号可以是任何形式的字面量,只要使用时能无歧义地定位到目标即可。符号引用与虚拟机实现的内存布局无关,引用的目标并不一定已经加载到了内存中。


③. 直接引用:直接引用可以是直接指向目标的指针、相对偏移量或是一个能间接定位到目标的句柄。直接引用是与虚拟机实现的内存布局相关的,同一个符号引用在不同虚拟机实例上翻译出来的直接引用一般不会相同。如果有了直接引用,那说明引用的目标必定已经存在于内存之中了。


⑥. 常量类型和结构


①. 常量池中每一项常量都是一个表,JDK1.7之后共有14种不同的表结构数据。如下表格所示:


微信图片_20220107132822.png


image.png


②. 这14种表(或者常量项结构)的共同点是:表开始的第一位是一个u1类型的标志位(tag),代表当前这个常量项使用的是哪种表结构,即哪种常量类型


③. 这14种常量项结构还有一个特点是,其中13个常量项占用的字节固定,只有CONSTANT_ Utf8_info占用字节不固定,其大小由length决定。为什么呢?因为从常量池存放的内容可知,其存放的是字面量和符号引用,最终这些内容都会是一个字符串,这些字符串的大小是在编写程序时才确定,比如你定义一个类,类名可以取长取短,所以在没编译前,大小不固定,编译后,通过utf-8编码,就可以知道其长度


相关文章
|
存储 缓存 算法
Java | JVM | 详细图解,坚持看完,带你真正搞懂Java虚拟机
Java | JVM | 详细图解,坚持看完,带你真正搞懂Java虚拟机
5028 0
Java | JVM | 详细图解,坚持看完,带你真正搞懂Java虚拟机
|
人工智能 移动开发 前端开发
通义灵码使用实践场景、效果和心得。
作为一名H5前端开发学者,我在学习过程中借助通义灵码@workspace大幅提升了效率。通过自动推荐匹配的CSS样式和项目内相似模板的排版建议,减少了重复劳动,效率提高超过一倍。此外,它还能解析并翻译GitHub上的英文.md文件,如成功部署声音合成AI:GPT-SoVITS项目,极大便利了我的学习与开发工作。
709 4
|
SQL Oracle 关系型数据库
Oracle数据库优化方法
【10月更文挑战第25天】Oracle数据库优化方法
442 7
|
供应链 安全 Serverless
蚂蚁开放联盟链是个啥?与蚂蚁其他区块链产品的差异
蚂蚁开放联盟链类似于公链,多家生态共享一条链,里面有节点和一般成员,基于区块链的共识节点技术来实现提效,通过加密、合约控制、c3s(暂未上线)来保持强私密性,费用相对低,且通过CloudIDE/SDK等工具实现开发工具的极大优化,一般是100元-999元,企业版一年是4888。
5429 0
|
8月前
|
关系型数据库 API Go
初学者友好:Go-Kratos 集成 go-crud,Ent ORM CRUD 无需重复编码,轻松上手
本文介绍如何基于 `kratos-ent-example` 项目,集成 `go-curd` 工具简化 Go-Kratos 微服务中 Ent ORM 的 CRUD 操作。通过封装重复逻辑,实现增删改查代码的极简编写,帮助初学者快速上手微服务开发,提升效率,降低学习成本。
372 3
|
SQL 监控 关系型数据库
MySQL数据库中如何检查一条SQL语句是否被回滚
检查MySQL中的SQL语句是否被回滚需要综合使用日志分析、事务状态监控和事务控制语句。理解和应用这些工具和命令,可以有效地管理和验证数据库事务的执行情况,确保数据的一致性和系统的稳定性。此外,熟悉事务的ACID属性和正确设置事务隔离级别对于预防数据问题和解决事务冲突同样重要。
568 2
|
SQL 数据挖掘 HIVE
【Hive SQL 每日一题】在线课程学生行为数据分析
该数据分析师任务是分析在线学习平台的学生行为,以优化课程内容和学习体验。提供的数据包括`students`表(含学生ID、姓名、年龄和性别)和`course_activity`表(含活动ID、学生ID、课程ID、活动日期和学习时长)。分析涉及:1) 学生参加的课程数量,2) 课程总学习时长,3) 按性别分组的平均学习时长,4) 学生首次参加的课程及日期,5) 学生最近一次学习的时长,以及6) 参与学生最多的课程。所有查询都使用了SQL,部分涉及窗口函数和分组统计。数据集可在给定链接下载。
423 2
|
弹性计算 监控 网络安全
阿里云与办公区互通方案
本文介绍了一种典型办公网络互通场景。
2188 0
阿里云与办公区互通方案
|
11月前
|
数据采集 API
京东:调用用户行为API分析购买路径,优化页面跳转逻辑
京东通过整合用户行为API,构建购买路径分析体系,运用马尔可夫链模型识别高损耗、断裂与冗余路径,优化页面跳转逻辑。实施流程合并、预加载及实时干预策略,转化率提升30.2%,路径缩短34.9%,跳转失败率下降78.7%,实现数据驱动的精细化运营。

热门文章

最新文章