代码编译的结果从本地机器吗转变为字节码,是存储格式发展的一小步,却是编程语言发展的一大步。
1. 无关性的基石:
各种平台的虚拟机都统一使用字节码作为程序存储格式,这是平台无关的基石。同时,语言无关性也在被开发者所重视,JAVA虚拟机同样可以运行其它的程序。
2. class文件结构:
Class文件是以8位字节为基础单位的二进制流,中间没有分隔符,所以整个Class文件都是程序运行的必要元素。
Class文件以一种伪结构来存储数据,包括:无符号数和表。无符号数属于基本数据类型,以u1,u2,u4,u8代表1字节,2字节,4字节和8字节的无符号数。可以用来描述数字,索引引用,数量值或者按照utf-8编码的字符串值。表是由多个无符号数或者其他表构成的符合结构的数据。
2.1 魔数与Class文件版本
头4个字节称为魔数,唯一作用就是确认这个文件是否为一个能够被虚拟机接受的Class文件。0xCAFEBABE就是JAVA文件的魔数。5,6字节是次版本号,7,8是主版本号。
2.2 常量池
接着版本号后,就是常量池。常量池的入口处放置一项u2类型的数据,代表常量池的计数值。该计数值从1开始,如果是22,则表示总共有21个常量,索引范围1~21。
常量池中有两类常量:字面量和符