当前位置: 首页 > backend >正文

【学习笔记】深入理解Java虚拟机学习笔记——第6章 类文件结构

第6章 类文件结构

6.1 概述

6.2 无关性的基石

1.平台无关性:可在各os的JVM重运行
2.语言无关性:无关语言,只要可以编译成.class文件,便可以在JVM上运行

6.3 class类文件的结构

.class文件也可以直接动态生成送入类加载器,并不一定需要存在文件,但动态生成的格式也是确定的。
.class中有两种数据类型
1>无符号数:U1、U2、U4、U8,表示数字、索引引用,UTF-8等。
2>表:由多个无符号数或其他表构成的复合数据类型

6.3.1 魔数与class文件的版本

.class文件开头为一个四字节的魔数,他代表着该文件为JVM可执行文件
【因为扩展名可以随意改动,所以很多很多时候使用文件开头的魔数判断文件类型】
.class文件5、6字节为次版本号,7、8字节为主版本号,JVM只能执行比自己版本低的calss文件

6.3.2 常量池

目前有17种常量,主要常量有两大类:
1>字面量:文本字符串与final常量值
2>符号引用:P218
各常量表格式“P222

6.3.3 访问标志

标识类是否为抽象类,是否为借口、是否final等,占用两字节,供16各标志位

6.3.4 类索引,父类索引与接口索引集合

类索引,父类索引用同一个U2表示,接口索引由集合表示,指向一个类描述符常量,常量中的索引值又指向全限定名字符串

6.4.5 字段表集合

1>字段访问标志:是否public、是否static、volatile等
2>简单名称与描述符
3>额外信息,如初始值指针

6.3.6 方发表集合

同上,方法字节码存放在code属性表集合中,可能添加.java中不存在的构造器方法,还有比如内部类访问外部的指针等

6.3.7 属性表集合

目前有29种属性表
P230

6.4 字节码指令简介

Java虚拟机指令由操作码及0-多个操作数构成,面向操作数栈。

6.4.1 字节码与数据类型

Java编译器会在编译/运行期间将byte、short、boolean、char转换为int类型数据,并使用int操作指令运算。

6.4.2 加载和存储指令

将数据在局部变量表和操作数栈之间来回传输

6.4.3 运算指令

数学运算、位运算、比较指令等

6.4.4 类型转换指令

小转大范围:安全转化
大转小范围:可能丢失精度

6.4.5 对象创建与访问指令

对象创建与访问字段、取数组长度、类型检查等

6.4.6 操作数栈管理指令

操作操作数栈

6.4.7 控制转移指令

条件分支指令,可修改PC寄存器的值来改变执行的语句

6.4.8 方法调用和返回指令

调用各种方法

6.4.9 异常处理指令

athrow显示抛出异常(throw语句)

6.4.10 同步指令

monitorenter与monitorexit支持synchronized关键字

6.5 公有设计,私有实现

在满足<<Java虚拟机规范>>的前提下,各组织可以自行实现JVM,并使用各种优化

6.6 class文件结构的发展

http://www.xdnf.cn/news/14434.html

相关文章:

  • CppCon 2016 学习: std::accumulate EXPLORING AN ALGORITHMIC EMPIRE
  • ubuntu 22.04 安装部署elasticsearch 7.10.0详细教程
  • Linux服务器入门教程
  • React forwardRef 与 useImperativeHandle 深度解析
  • LangGraph 深度应用指南:构建下一代Agent系统
  • 使用VSCode开发MCU,FreeRTOS进Hard_Fault调试
  • JVM——JVM中的扩展之道
  • 基于二进制XOR运算的机器人运动轨迹与对称图像自动生成算法
  • 基于深度学习的智能交通流量预测系统:技术与实践
  • 批量下载图片小工具
  • 【项目实训】【项目博客#07】HarmonySmartCodingSystem系统前端开发技术详解(5.12-6.15)
  • 寄存器的使用
  • Number.toFixed() 与 Math.round() 深度对比解析
  • 【SpringCloud】2.0 服务治理——nacos
  • LangGraph--设计一个给出标准提示词模板的聊天机器人
  • 探索RAGFlow:解锁生成式AI的无限潜能(2/6)
  • 蒸馏微调DeepSeek-R1-Distill-Qwen-7B
  • 大模型笔记3:通过插件增强大模型的能力
  • Iceberg与Hive集成深度
  • 【FreeRTOS-信号量】
  • LLM对话框项目 EventSource封装和MessageServiceClass流式展示封装
  • MFE微前端高级版:Angular + Module Federation + webpack + 路由(Route way)完整示例
  • vue相关爬坑总结
  • [windows工具]OCR多区域识别导出excel工具1.2版本使用教程及注意事项
  • 变幻莫测:CoreData 中 Transformable 类型面面俱到(四)
  • 深度神经网络学习
  • 设计模式-装饰器模式
  • React-router 路由历史的模式和原理
  • AI 神经网略小白学习笔记(一) -- 环境搭建
  • 【1】Redis 缓存穿透原理和解决方案