6.6 Class文件结构的发展

6.6 Class文件结构的发展

Class文件结构自《Java虚拟机规范》初版订立以来,已经有超过二十年的历史。这二十多年间, Java技术体系有了翻天覆地的改变,JDK的版本号已经从1.0提升到了13。相对于语言、API以及Java技术体系中其他方面的变化,Class文件结构一直处于一个相对比较稳定的状态,Class文件的主体结构、 字节码指令的语义和数量几乎没有出现过变动[^1],所有对Class文件格式的改进,都集中在访问标志、 属性表这些设计上原本就是可扩展的数据结构中添加新内容。

如果以《Java虚拟机规范(第2版)》(对应于JDK 1.4,是Java 2的奠基版本)为基准进行比较的话,在后续Class文件格式的发展过程中,访问标志新加入了ACC_SYNTHETIC、 ACC_ANNOTATION、ACC_ENUM、ACC_BRIDGE、ACC_VARARGS共五个标志。属性表集合中, 在JDK 5到JDK 12发展过程中一共增加了20项新属性,这些属性大部分是用于支持Java中许多新出现的语言特性,如枚举、变长参数、泛型、动态注解等。还有一些是为了支持性能改进和调试信息,譬如JDK 6的新类型校验器的StackMapTable属性和对非Java代码调试中用到的SourceDebugExtension属性。

Class文件格式所具备的平台中立(不依赖于特定硬件及操作系统)、紧凑、稳定和可扩展的特点,是Java技术体系实现平台无关、语言无关两项特性的重要支柱。

[^1]: 二十余年间,字节码的数量和语义只发生过屈指可数的几次变动,例如JDK 1.0.2时改动过 invokespecial指令的语义,JDK 7增加了invokedynamic指令,禁止了ret和jsr指令。