• 《深入理解JAVA虚拟机》第三版 第六章 要点总结


    本文仅作为复习清单使用

    Class结构

    1.魔数(第1~4字节)
    固定为0xCOFEBABE
    2.版本号(第5~8字节)
    第5,6字节:次版本号,JDK2~JDK12一直置零
    第7,8字节:主版本号,计数从45开始
    3.常量池
    索引从1开始
    第9,10字节 常量池计数值
    接下来是常量表
    4.访问标志
    5.类索引集合
    6.父类索引集合
    7.接口索引集合
    8.字段表集合
    9.方法表集合

    以上部分按顺序排列
    属性表集合包含在以上集合之中

    常量池内容

    字面量
    符号引用
    

    JAVA类的符号引用的理解
    常量池中共17种类型,每一种类型都是以一个字节的tag开头,标识接下来是第几类类型
    类型的形式详见P222

    访问标志

    这个类的修饰符(final,public,abstract),类型(类,接口,注解,枚举,模块等),是否由用户代码产生(可能由jvm添加),是否允许调用invokespecial指令
    一共9个标志位可用,详见P224

    类索引

    u2,指向一个常量表,表示类的全限定名
    父类索引,接口索引也一样,只是接口索引是一个集合,拥有一个接口计数器

    属性表

    Code属性 记录方法中的数据
    Exception 方法抛出的异常(throws)
    LineNumberTable 记录指令对应的java行号,非必须
    LocalVariableTable 记录参数名,非必须,如果没有,代码调试会无法获取相关参数的值
    LocalVariableTypeTable 用于泛型
    SourceFile 源码文件名称
    SourceDebugExtension 用于帮助非java文件(如jsp)的Debug
    ConstantValue 用于static变量的初始化,javac追加限制 :final
    InnerClasses  记录内部类与宿主类的关系
    Deprecated 布尔属性,表示是否过时
    Synthetic 布尔属性,表示是否有编译器自动生成
    StackMapTable 用于虚拟机验证字节码
    Signature 记录泛型相关信息,便于反射
    BootstrapMethods 
    MethodParameter 记录方法的各个形参名称和信息
        模块化相关属性
        运行时注解
    

    变量槽

    JVM为局部变量分配内存所使用的最小单位

    方法类代码长度

    不超过65535条指令

    异常表

    P237
  • 相关阅读:
    mongoose pre
    socket2
    golang (10 语法)
    golang(7 方法重写)
    npm安装git上的包
    npm 配置
    npm v3版本
    npm v2版本
    awk oneline
    sed oneline
  • 原文地址:https://www.cnblogs.com/ZGQblogs/p/12584518.html
Copyright © 2020-2023  润新知