深入理解java虚拟机 第六章 类文件结构

[亡魂溺海] 提交于 2020-02-08 20:34:27

class类文件的结构

  class文件是一组以8位字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑地排列在class文件中,没有任何分隔符

  class文件格式采用一种伪结构来存储数据,这个伪结构只有两种数据类型:

    1 无符号数:基本的数据类型,可以用来描述数字、索引引用、数量值或者按照UTF-8编码构成字符串值

    2 表:由多个无符号数或者其他表作为数据项构成的复合数据类型

  魔数与Class文件的版本

    每个Class文件的头4个字节称为魔数,它的唯一作用是确定这个文件是否为一个能被虚拟机接受的Class文件

    紧接着魔数的4个字节存储的是Class文件的版本号

  常量池

    版本号之后是常量池,常量池可以理解为Class文件之中的资源仓库,它是与其他项目关联最多的数据类型,

    也是占用空间最大的数据项目之一,还是Class文件中第一个出现的表类型数据项目

  访问标志

    常量池结束后,紧接着两个字节代表访问标志,这个标志用于识别一些类或者接口层次的访问信息

  类索引、父类索引与接口索引集合

    Class文件由这三项数据来确定这个类的继承关系

  字段表集合

    字段表用于描述接口或者类中声明的变量,包括类级变量和实例级变量

  方法表集合

    依次包括了访问标志、名称索引、描述符索引、属性表集合几项  

    方法里的java代码,经过编译器编译成字节码指令后,放在方法属性表集合中一个“code”的属性里面

  属性表集合

    在Class文件、字段表、方法表都可以携带自己的属性表集合,用于描述某些场景专有的信息

 

 

 

字节码指令简介

  java虚拟机的指令由一个字节长度、代表着某种特定操作含义的数字(操作码)以及跟随其后的0至多个代表此操作所需参数构成

  java虚拟机采用面向操作数栈的架构,所以大多数指令都不包含操作数,只有一个操作码

  字节码与数据类型

    在java虚拟机的指令集中,大多数的指令都包含了其操作所对应的数据类型信息

  加载和存储指令

  运算指令

  类型转换指令

  对象创建与访问指令

  操作数栈管理指令

  控制转移指令

  方法调用和返回指令

  异常处理指令

  同步指令

 

 

 

公有设计和私有实现

  

    

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!