前言
曾经:源代码 -> 经过编译 -> 本地机器码
Java:源代码 -> 经过编译 -> 字节码 -> 解释器 -> 本地机器码
字节码:与操作系统和机器指令集无关的,平台中立的程序编译后的存储格式
字节码是无关性的基石
平台无关性的基石:
- 所有平台都统一支持字节码
- 不同的Java虚拟机都可以执行平台无关的字节码
因此实现了一次编译,到处运行
语言无关性的基石:
- Java虚拟机
- 字节码
Java虚拟机不是只可以执行Java源代码编译而成的字节码,只要符合要求(安全…)的字节码,它都可以执行。因此Kotlin等语言也可以运行在Java虚拟机上。
Class 字节码文件结构
文件格式存取数据的类型
- 无符号数 : u1,u2,u4,u8代表1,2,4,8个字节的无符号数(可以表示数字,UTF-8的字符串,索引引用…)
- 表: 由n个无符号数或n个表组成(命名以
_info
结尾)
初识 Class 文件格式
1 | public class Test { |
使用可视化工具classpy查看反编译的结果
每个集合前都有一个计数器来统计集合中元素的数量