美文网首页
JVM Class 字节码学习笔记

JVM Class 字节码学习笔记

作者: 没有颜色的菜 | 来源:发表于2018-08-15 14:47 被阅读0次

    目标 直接阅读字节码

    魔数

    • 开头前4个字节为 CAFE BABE,(两个十六进制字符为一个字节),后四个字节为Class 文件的版本号,先次版本号,后主版本号,能向下兼容,不能向后兼容,
    • 之后的两个字节为常量池常量的个数,从1开始计数,在之后就是每一个常量的信息,最多64
      k个
    • 常见的有 14 个
      • Class:tag(u1)+ name_index(u2)
      • Utf8:tag(u1)+ length(u2)+ bytes(length)方法名,字段名,加上包名不能超过64k
      • 基础数据类型,tag(u1)+ bytes(?)值
    • 访问标志,两个字节,为标志位,用于表示类的信息,比如是否是public,final,super,interface,abstract,enum,annotation
    • 类索引,父类索引,接口索引
    • 字段表,访问标志,public protected private 三选一,final volatile 不能同时选择,接口中public static final 是必须的。access_flags, name_index(简单名称),descriptor_index(全限定名),attributes_count,attributes
    • 方法表集合access_flags (strictfp,native,synchronized
    • 属性表集合
      • InnerClass
      • LineNumberTable 源码与字节码对应
      • LocalVariableTable
      • StackMapTable
      • Signature
      • SourceFile
      • Synthetic
        每个属性都引用常量池里来表示
        Code 属性,方法体的信息存储在这,code_length 长度固定

    相关文章

      网友评论

          本文标题:JVM Class 字节码学习笔记

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