03 java字节码文件

java源码经过编译,生成class字节码文件,JVM加载class文件执行。字节码文件将java语言与JVM解耦,除java语言外Groovy、JRuby、Jython、Scala均可生成字节码文件,运动到java虚拟机上。现在了解下字节码文件结构。

字节码文件数据结构

无符号数:u1、u2、u4、u8 来分别代表 1 个字节、2 个字节、4 个字节和 8 个字节的无符号数

表:多个无符号数或者其他表作为数据项构成的复合数据类型,class文件中所有的表都以“_info”结尾

class文件结构


魔数: 0XCAFEBABE

版本号:前两个字节代表次版本号,后两个字节主版本号

常量池:存放类各种信息的表,每一项是一个表,常量池内部的表中也有相互之间的引用,前两个字节为计数器,后面为各种表。

访问标志:两个字节,定义类或者接口,public或者private,abstract或者final等。

类索引、父类索引、接口索引计数器、接口索引:所谓索引,即常量池中的第几项,两个字节,会指向常量池中的类/接口引用表。

字段表:类级别变量以及实例变量,包含字段计数器以及各个字段表。

方法表:计数器以及各个方法表

属性表:无固定格式,典型如Code类型属性表,为字节码指令,字段表及方法表中会有属性表

编译插桩

可分为两类

  1. APT(Annotation Process Tools) :用于生成 Java 代码
  2. AOP(Aspect Oriented Programming):用于操作字节码
    熟悉了class文件结构,就可以通过AOP记性编译插桩,目前主要有两种框架:AspectJ、ASM

你可能感兴趣的:(03 java字节码文件)