6 类文件结构
6.3 Class类文件的结构
Class文件是一组以8个字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑地排列在文件之中,中间没有任何分隔符,这使得整个Class文件中存储的内容几乎全部是程序运行的必要数据,没有空隙存在,当遇到需要占用8个字节以上空间的数据项时,则会按照高位在前的方式分割成若干个8个字节进行存储。
6.3.1 魔数与Class文件的版本
每个Class文件的头4个字节被称为魔数(Magic Number) ,它的唯一作用就是确定这个文件是否为一个能别虚拟机接受的Class文件。不仅是Class文件,很多文件格式标准中都有使用魔数来进行身份识别的习惯。
8 虚拟机字节码执行引擎
8.2 运行时栈帧结构
Java虚拟机以方法作为最基本的的执行单元,“栈帧”则是用于支持虚拟机进行方法调用和方法执行背后的数据结构,它也是虚拟机运行时数据区中的虚拟机栈的帧元素。栈帧存储了局部变量表、操作时栈、动态连接和方法返回地址等信息。每一个方法从调用开始至执行结束的过程,都对应着一个栈帧在虚拟机里面从入栈到出栈的过程。
每一个栈帧都包括了局部变量表,操作数栈、动态连接、防范返回地址和一些额外的附加信息。在编译Java程序源码的时候,栈帧中需要多大的局部变量表,需要多深的的操作数栈就已经被分析计算出来,并且写入方发表的Code属性之中。换而言之,一个栈帧需要分配多少内存,并不会受到程序运行期变量数据的影响,而仅仅取决于程序源码和具体的虚拟机实现的栈内存的布局形式。
