引用两句话来说明字节码文件的重要性:
代码编译的结果从本地机器码转变为字节码,是存储格式发展的一小步,却是编程语言发展的一大步。来自《深入理解Java虚拟机》-周志明
理解字节码以及理解Java编译器如何生成Java字节码与学习汇编知识对于C/C++程序员有一样的意义。来自IBM developerWorks周刊
本人在学习字节码文件后,明显能感觉到的几个好处:
- 可以更好的理解Java语言特性
- 对以后学习Javassist、ASM等字节码操作工具有很大帮助
- 解三方库源码问题,能更好的定位、解决问题
阅读本文,你将学会如何分析字节码内容。
1. 基础认识
字节码技术是Java虚拟机实现平台无关性和语言无关性的关键。这句话有两层含义:
- java语言,“一处编译,处处运行”,说的就是Java虚拟机的平台无关性,Java虚拟机实现了不同平台的兼容,Java虚拟机只需加载符合《Java虚拟机规范》的字节码即可。
- 因为虚拟机只与字节码“打交道”,所以源码存在的形式不一定是Java语言,因此诞生了Groovy语言、JRuby语言等,它们通过编译器生成字节码,供Java虚拟机使用。
2 字节码文件结构
首先我们来统一术语,通常说的“字节码文件”、“.class文件”、“class文件”都是指的字节码文件,本文将统一使用字节码文件描述。
注意:字节码的载体不一定非得是磁盘文件,也可以是来源于网络