常量池表的解读

image-20230209212807864

创建MethodrefInfo类刻画CONSTANT_Methodref_info

image-20230209213111088
public class MethodrefInfo {
    // 类信息(其实也只有类名信息)
    ClassInfo classInfo;

    // 名字和描述符
    NameAndTypeInfo nameAndTypeInfo;
}

public class ClassInfo {
    // 类名
    Utf8Info className;
}

public class NameAndTypeInfo {
    // 名字
    Utf8Info name;

    // 描述符
    Utf8Info descriptor;
}

// 相当于JVM层次的String类型
public class Utf8Info {
    // 字节数组长度
    int byteArrayLengths;

    // 字符串长度
    int strLengths;

    // 字符串字面量
    String string;
}

类访问标识

image-20230209231837602

类接口索引, 父类接口索引和接口索引集合

image-20230209232308167

image-20230209232412338

字段表集合的解读

public class FieldInfo{
    //字段名
    Utf8Info name;

    // 字段的描述符
    Utf8Info descriptor;

    // 2字节的访问标志, 各标识位的含义和类访问标识的含义相同
    byte[] accessFlag;

    // 字段中的属性集合
    AttributeInfo[] attributes;
}

方法表集合的解读

属性表集合的解读

字段的属性用于存储一些额外的信息, 例如初值化值, 注释信息等

常量字段可以看到ConstantValue属性

字节码指令附录

字节码指令 含义与解释
ldc 从字符串常量池中加载数据
astore_3, astore 4 前者直接作为一条指令, 而后者是astore指令加上操作数4.
因为1,2,3常用, 所以将其直接作为整合到操作码中, 达到加速效果
dup 复制

   转载规则


《》 熊水斌 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
类加载子系统 通过类加载子系统(Class Loader)加载字节码文件(.class) 通过执行引擎来执行 如果执行过程中需要调用本地方法(native), 则通过本地方法栈和本地方法接口交互 类的声明周期(类的加载过程) 加载L
2023-05-17
下一篇 
Java内存解析虚拟机栈 局部变量 堆 new的对象
2023-05-17
  目录