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

JVM深入浅出(6)--- 类文件结构

自己在学习《深入理解Java虚拟机:JVM高级特性与最佳实践(第3版) (华章原创精品) - 周志明》时的一些思考和总结

1. 无关性的基石

  • 平台无关性
    • 字节码是构成平台无关性的基石,不同平台的java虚拟机,都统一支持的程序存储格式--字节码
  • 语言无关性
    • 不管是什么语言,只要能编译成class文件,就能被jvm的字节码解释器运行
      image-20260213141244588

2. Class类文件的结构

一个class文件对应着唯一一个类或者接口的定义信息

class文件是以八字节为基础单位的二进制字节流,各类数据按顺序摆放

image-20260213141749892
class文件中只有两种数据结构

  • 无符号数
    • 无符号数包括u1,u2,u4,u8 分别代表占用1字节,2字节,4字节,8字节。无符号数可以用来描述数字、索引引用、数量值或者按照UTF-8编码构成字符串 值
    • 表是以无符号数和表构成的一种复杂数据结构,通常以_info结尾。class文件也可以看作是一张表。

2.1 魔数与Class文件的版本

  • 魔术:
    • 最开始的四个字节是魔术,魔术是验证该文件是否为被虚拟机所接受的Class文件,值是0xCAFEBABE(魔术也可以验证其他类型文件)。
  • 版本号
    • 接下来的四个字节是class文件的版本号,前面 2 字节是次版本号,后面 2 字节是主版本号。高版本的JDK接受运行向下兼容的版本号,但是不能运行超过版本号的

2.2 常量池

常量池是class文件中的资源仓库,由于常量池的大小不是固定的,通常开头的两个字符是常量池的数目。

注意常量池索引是数目是从1开始算的(其他,比如接口索引集合,字段表,方法表都是从0开始算的),留0的原因是为了表示该引用未使用常量池中任何元素。

常量池中主要放的是字面量符号引用

  • 字面量通常就是一些模板字符串,final定义的常量

  • 符号引用通常包括这些,这些引用将会通过动态链接的方式,由符号引用转化成内存中的实际引用

    • 模块导出或者开放的包

    • 类和接口的完全限定名

    • 字段的名称和描述符

    • 方法的名称和描述符

    • 方法句柄和方法类型(方法句柄就是去定位某个方法然后使用,类似于方法的反射)。

    • 动态调用点和动态常量

常量池中的每个元素都是一张表,而常量池中的表有着不同种的表结构

image-20260213143543797

2.3 访问标志

接下来的两个字节是访问标志,用于识别一些类或 者接口层次的访问信息,表示这个class文件代表的是类还是接口,是public的吗,是否为abstract,如果是类是否为final的。

http://www.jsqmd.com/news/603200/

相关文章:

  • 如何快速开发Git-Absorb自定义吸收策略:完整指南
  • 2026最新珠三角隔音门窗推荐!全国优质隔音门窗制造商权威榜单 - 十大品牌榜
  • 颠覆级开源模型Wan2.2-TI2V-5B:重新定义AI视频创作
  • Hogan.js模板压缩与优化:5个技巧减少资源占用
  • 玩转OurBMC第二十三期:OurBMC之PCIe接口应用(下)——虚拟网卡实战
  • 广西江马新能源科技有限公司:南宁青秀区公园游船销售价格多少 - LYL仔仔
  • 终极指南:如何用Pandoc为build-linux项目生成专业HTML文档
  • django-social-auth架构解析:深入理解认证管道和工作原理
  • 2026最新长三角阳光房生产厂家推荐!国内优质品牌权威榜单发布 - 十大品牌榜
  • 速勘达远程协同:2026 高效协同的刑侦现场精准还原系统公司推荐 - 品牌2026
  • Rails API微服务通信终极指南:构建高性能API应用的完整教程
  • 丝杆疲劳性能检测必看,丝杆疲劳试验机知名厂家,行业标杆品质更放心 - 品牌推荐大师
  • Grimoire 安全机制:Lucia身份验证与用户权限管理
  • 自定义控制的创作自由:SRWE如何掀起窗口分辨率效率革命
  • AppImageLauncher终极指南:3分钟掌握Linux便携应用一键管理
  • 隐私优先:OpenClaw+百川2-13B量化模型本地化医疗数据整理
  • 基于STM32的4轴步进电机加减速控制工程源码(梯形加减速算法)
  • 2026年4月行业内双壁波纹管供应商,双壁波纹管/克拉管/bwfrp纤维编织拉挤管/PVC格栅管,双壁波纹管厂家哪个好 - 品牌推荐师
  • PyWxDump终极指南:从技术探索到法律合规的完整历程
  • 电力系统潮流计算:那些你必须玩转的标准算例
  • 第三方API不稳定:我们的容错设计与测试
  • 连接座塑料注塑模结构与设计【论文+CAD图纸+开题报告+任务书+部分Creo三维图】
  • angular-chart.js 浏览器兼容性解决方案:IE8及老旧浏览器的完整支持指南
  • POD定制系统:跨境卖家的破局利器与实操指南 - 速递信息
  • 深度解析:三晶pcba控制板定制——品质管控与实践指南 - 速递信息
  • 探索自动追频超声波发生器:半桥数码管显示AVR单片机方案
  • 突破云盘限速壁垒:开源直链解析工具的全场景应用方案
  • OpenClaw多模型路由:千问3.5-35B-A3B-FP8与轻量模型协同策略
  • 国标GB28181/RTSP/ONVIF视频监控EasyCVR赋能智慧工地破解监控痛点,筑牢数字化管理底座
  • 10个SQL高级特性完全解析:db-tutorial教你写出高效查询的终极指南