class文件的大致结构从前到后
名称 | 用途 | 大小 | 补充说明 |
---|---|---|---|
魔数 | (用来验证是不是虚拟机合适的class文件 | 4字节 | 因为后缀名可以随意改动,所以使用魔数也是出于安全的考虑 |
版本号 | (用来标识该class文件能够在哪个版本jdk运行) | 4字节 | 前2字节是次版本号,后2字节是主版本号 版本高的jdk可以加载版本低的class文件 |
常量池 | (class文件的资源仓库) | 不定 | 主要存放字面量和符号引用,字面量就是文本字符串和申明为final的常量,符号引用包括了类和接口的全限定名,字段名称和描述符。方法名称和描述符,常量池的容量计数从1开始。因为常量池0的位置用来存储常量池的容量 |
访问标志 | (定义是不是类,是不是public | 2字节 | 就是判断一个class的访问标志,是否final,是否public |
类索引 | 确定本类的全限定名 | 2字节 | 无 |
父类索引 | 确定父类的全限定名 | 2字节 | 无 |
接口索引计数器 | 统计接口的数量 | 2字节 | 无 |
接口索引集合 | 接口们的全限定名 | 接口计数器*2 | 无 |
字段表集合 | 描述申明的变量包括类级变量实例变量不包括局部变量 | 不定 | 不会列出超类或父接口的继承的字段 |
方法表集合 | 描述申明的方法包括访问标志,名称索引,描述符索引,属性表索引,属性表集合 |
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/69625.html
摘要:对象创建与访问指令虽然类实例和数组都是对象,但虚拟机对类实例和数组的创建和操作使用了不同的字节码指令。异常处理指令在虚拟机中,处理异常语句不是由字节码指令来实现的,而是采用异常表的方式。 《深入理解Java虚拟机:JVM高级特性与最佳实践(第二版》读书笔记与常见面试题总结 本节常见面试题(推荐带着问题阅读,问题答案在文中都有提到): 简单介绍一下Class类文件结构(常量池主要存放的是...
摘要:对一个文件的字节码进行逐行的分析是理解文件结构的最佳方式。本文的目的在于尽可能完整地拆解的字节码并将其分块分析,最终得到的图解结构希望可以帮助到你。字节码指令的具体含义鉴于与结构是相对独立的主题不再详述,后续会再单独深入介绍。 对一个class文件的字节码进行逐行的分析是理解class文件结构的最佳方式。但是往往复杂的二进制字节码会让人望而却步,或者只有仔细一点点盯着才能保证不花眼。本...
摘要:在属性中,和分别用于存储字节码长度和字节码指令,每条指令即一个字节类型。在虚拟机执行时,通过读取中的一个个字节码,并将字节码翻译成相应的指令。另外,虽然是一个类型的值,但是实际上一个方法不允许超过条字节码指令。 最近在写一个私人项目,名字叫做SmallVM,SmallVM的目的在于通过实现一个轻量级的Java虚拟机,加深对Java虚拟机的认知和理解。在Java虚拟机加载类的过程中,需要...
摘要:在属性中,和分别用于存储字节码长度和字节码指令,每条指令即一个字节类型。在虚拟机执行时,通过读取中的一个个字节码,并将字节码翻译成相应的指令。另外,虽然是一个类型的值,但是实际上一个方法不允许超过条字节码指令。 最近在写一个私人项目,名字叫做ClassAnalyzer,ClassAnalyzer的目的是能让我们对Java Class文件的设计与结构能够有一个深入的理解。主体框架与基本功...
摘要:类文件的结构文件是一组以位字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑地排列在文件之中,中间没有添加任何分隔符,这使得整个文件中存储的内容几乎全部是程序运行的必要数据,没有空隙存在。 点击进入我的博客 4.1 字节码 平台无关:Sun公司以及其他的虚拟机提供商发布了许多可以运行在各种不同平台上的虚拟机,这些虚拟机都可以载入和执行同一种平台无关的字节码,从而实现了程序的一次编...
阅读 1880·2021-11-11 16:55
阅读 2063·2021-10-08 10:13
阅读 738·2019-08-30 11:01
阅读 2154·2019-08-29 13:19
阅读 3277·2019-08-28 18:18
阅读 2620·2019-08-26 13:26
阅读 578·2019-08-26 11:40
阅读 1864·2019-08-23 17:17