美文网首页
类文件结构

类文件结构

作者: GIT提交不上 | 来源:发表于2019-11-16 16:08 被阅读0次

    一、概述

      “一次编写,到处运行”。实现语言无关性的基础是虚拟机和字节码(*.class)存储格式。

    图1-1 语言无关性

    二、Class类文件结构

      Class文件是一组以8位字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑地排列在Class文件中,中间不添加任何分隔符。Class文件格式采用类似结构体的伪结构存储数据,该结构包含两种数据类型:无符号数和表。
      无符号数属于基本数据类型,u1、u2、u4、u8分别代表1/2/4/8字节的无符号数,可以用来描述数字、索引引用、数量值或者按照UTF-8编码构成字符串值。
      表是由多个无符号数或其他表作为数据项构成的复合数据类型,习惯性以“_info”结尾。用于描述有层次关系的复合结构的数据。

    图2-1 Class文件格式

      Class文件的头4个字节称为魔数(0xCAFEBABE),用于确定这个文件是否为一个能被虚拟机接受的Class文件。紧接着4个字节存储Class文件的版本号。(第5和6个字节是次版本号,第7和8个字节是主版本号)
      字节码指令:Java虚拟机指令由一个字节长度的、代表着某种特定操作含义的数字(操作码)以及之后0或多个代表此操作所需参数(操作数)构成(0~255)。Java虚拟机解释器(不考虑异常处理):

    do{
        自动计算PC寄存器的值加1;
        根据PC寄存器的指示位置,从字节码流中取出操作码;
        if(字节码存在操作数){
            从字节码流中取出操作数;
        }
        执行操作码所定义的操作;
    }while(字节码长度>0);
    

      字节码指令指令集参考如下链接。

    java 字节码指令集 汇编

    相关文章

      网友评论

          本文标题:类文件结构

          本文链接:https://www.haomeiwen.com/subject/bdzkictx.html