伍佰目录 短网址
  当前位置:海洋目录网 » 站长资讯 » 站长资讯 » 文章详细 订阅RssFeed

<JVM中篇:字节码与类的加载篇>01-Class字节码文件结构

来源:本站原创 浏览:155次 时间:2021-07-25
目录
  • Class文件结构
    • 10.1. 属性计数器
    • 10.2. 属性表
    • 9.1. 方法计数器
    • 9.2. 方法表
    • 8.1. 字段计数器
    • 8.2. 字段表
    • 5.1. 常量池计数器
    • 5.2. 常量池表
    • 4.1. Class文件版本号对应关系
    • 1. Class字节码文件结构
    • 2. Class文件数据类型
    • 3. 魔数
    • 4. 文件版本号
    • 5. 常量池集合
    • 6. 访问标志
    • 7. 类索引、父类索引、接口索引
    • 8. 字段表集合
    • 9. 方法表集合
    • 10. 属性表集合


Class文件结构1. Class字节码文件结构
类型名称说明长度数量魔数u4magic魔数,识别Class文件格式4个字节1版本号u2minor_version副版本号(小版本)2个字节1u2major_version主版本号(大版本)2个字节1常量池集合u2constant_pool_count常量池计数器2个字节1cp_infoconstant_pool常量池表n个字节constant_pool_count - 1访问标识u2access_flags访问标识2个字节1索引集合u2this_class类索引2个字节1u2super_class父类索引2个字节1u2interfaces_count接口计数器2个字节1u2interfaces接口索引集合2个字节interfaces_count字段表集合u2fields_count字段计数器2个字节1field_infofields字段表n个字节fields_count方法表集合u2methods_count方法计数器2个字节1method_infomethods方法表n个字节methods_count属性表集合u2attributes_count属性计数器2个字节1attribute_infoattributes属性表n个字节attributes_count
2. Class文件数据类型数据类型定义说明无符号数无符号数可以用来描述数字、索引引用、数量值或按照utf-8编码构成的字符串值。其中无符号数属于基本的数据类型。 以u1、u2、u4、u8来分别代表1个字节、2个字节、4个字节和8个字节表表是由多个无符号数或其他表构成的复合数据结构。所有的表都以“_info”结尾。 由于表没有固定长度,所以通常会在其前面加上个数说明。
3. 魔数


4. 文件版本号

4.1. Class文件版本号对应关系主版本(十进制)副版本(十进制)编译器版本4531.14601.24701.34801.44901.55001.65101.75201.85301.95401.105501.11


5. 常量池集合

类型名称数量u2(无符号数)constant_pool_count1cp_info(表)constant_poolconstant_pool_count - 1

5.1. 常量池计数器

5.2. 常量池表

类型标志(或标识)描述CONSTANT_Utf8_info1UTF-8编码的字符串CONSTANT_Integer_info3整型字面量CONSTANT_Float_info4浮点型字面量CONSTANT_Long_info5长整型字面量CONSTANT_Double_info6双精度浮点型字面量CONSTANT_Class_info7类或接口的符号引用CONSTANT_String_info8字符串类型字面量CONSTANT_Fieldref_info9字段的符号引用CONSTANT_Methodref_info10类中方法的符号引用CONSTANT_InterfaceMethodref_info11接口中方法的符号引用CONSTANT_NameAndType_info12字段或方法的符号引用CONSTANT_MethodHandle_info15表示方法句柄CONSTANT_MethodType_info16标志方法类型CONSTANT_InvokeDynamic_info18表示一个动态方法调用点

标志符含义B基本数据类型byteC基本数据类型charD基本数据类型doubleF基本数据类型floatI基本数据类型intJ基本数据类型longS基本数据类型shortZ基本数据类型booleanV代表void类型L对象类型,比如:Ljava/lang/Object;[数组类型,代表一维数组。比如:`double[][][] is [[[D









6. 访问标志

标志名称标志值含义ACC_PUBLIC0x0001标志为public类型ACC_FINAL0x0010标志被声明为final,只有类可以设置ACC_SUPER0x0020标志允许使用invokespecial字节码指令的新语义,JDK1.0.2之后编译出来的类的这个标志默认为真。(使用增强的方法调用父类方法)ACC_INTERFACE0x0200标志这是一个接口ACC_ABSTRACT0x0400是否为abstract类型,对于接口或者抽象类来说,次标志值为真,其他类型为假ACC_SYNTHETIC0x1000标志此类并非由用户代码产生(即:由编译器产生的类,没有源码对应)ACC_ANNOTATION0x2000标志这是一个注解ACC_ENUM0x4000标志这是一个枚举



7. 类索引、父类索引、接口索引

长度含义u2this_classu2super_classu2interfaces_countu2interfaces[interfaces_count]


8. 字段表集合

8.1. 字段计数器

标志名称标志值含义数量u2access_flags访问标志1u2name_index字段名索引1u2descriptor_index描述符索引1u2attributes_count属性计数器1attribute_infoattributes属性集合attributes_count8.2. 字段表

标志名称标志值含义ACC_PUBLIC0x0001字段是否为publicACC_PRIVATE0x0002字段是否为privateACC_PROTECTED0x0004字段是否为protectedACC_STATIC0x0008字段是否为staticACC_FINAL0x0010字段是否为finalACC_VOLATILE0x0040字段是否为volatileACC_TRANSTENT0x0080字段是否为transientACC_SYNCHETIC0x1000字段是否为由编译器自动产生ACC_ENUM0x4000字段是否为enum

标志符含义B基本数据类型byteC基本数据类型charD基本数据类型doubleF基本数据类型floatI基本数据类型intJ基本数据类型longS基本数据类型shortZ基本数据类型booleanV代表void类型L对象类型,比如:Ljava/lang/Object;[数组类型,代表一维数组。比如:`double[][][] is [[[D


9. 方法表集合

9.1. 方法计数器

9.2. 方法表

标志名称标志值含义数量u2access_flags访问标志1u2name_index方法名索引1u2descriptor_index描述符索引1u2attributes_count属性计数器1attribute_infoattributes属性集合attributes_count

标志名称标志值含义ACC_PUBLIC0x0001public,方法可以从包外访问ACC_PRIVATE0x0002private,方法只能本类访问ACC_PROTECTED0x0004protected,方法在自身和子类可以访问ACC_STATIC0x0008static,静态方法
10. 属性表集合

10.1. 属性计数器

10.2. 属性表

类型名称数量含义u2attribute_name_index1属性名索引u4attribute_length1属性长度u1infoattribute_length属性表

属性名称使用位置含义Code方法表Java代码编译成的字节码指令ConstantValue字段表final关键字定义的常量池Deprecated类,方法,字段表被声明为deprecated的方法和字段Exceptions方法表方法抛出的异常EnclosingMethod类文件仅当一个类为局部类或者匿名类时才能拥有这个属性,这个属性用于标识这个类所在的外围方法InnerClass类文件内部类列表LineNumberTableCode属性Java源码的行号与字节码指令的对应关系LocalVariableTableCode属性方法的局部变量描述StackMapTableCode属性JDK1.6中新增的属性,供新的类型检查检验器和处理目标方法的局部变量和操作数有所需要的类是否匹配Signature类,方法表,字段表用于支持泛型情况下的方法签名SourceFile类文件记录源文件名称SourceDebugExtension类文件用于存储额外的调试信息Synthetic类,方法表,字段表标志方法或字段为编译器自动生成的LocalVariableTypeTable类是哟很难过特征签名代替描述符,是为了引入泛型语法之后能描述泛型参数化类型而添加RuntimeVisibleAnnotations类,方法表,字段表为动态注解提供支持RuntimeInvisibleAnnotations类,方法表,字段表用于指明哪些注解是运行时不可见的RuntimeV����,�ۻ�isibleParameterAnnotation方法表作用与RuntimeVisibleAnnotations属性类似,只不过作用对象或方法RuntimeInvisibleParameterAnnotation方法表作用与RuntimeInvisibleAnnotations属性类似,只不过作用对象或方法AnnotationDefault方法表用于记录注解类元素的默认值BootstrapMethods类文件用于保存invokeddynamic指令引用的引导方法限定符



类型名称数量含义u2attribute_name_index1属性名索引u4attribute_length1属性长度u2max_stack1操作数栈深度的最大值u2max_locals1局部变量表所需的存续空间u4code_length1字节码指令的长度u1codecode_lenth存储字节码指令u2exception_table_length1异常表长度exception_infoexception_tableexception_length异常表u2attributes_count1属性集合计数器attribute_infoattributesattributes_count属性集合








  推荐站点

  • At-lib分类目录At-lib分类目录

    At-lib网站分类目录汇集全国所有高质量网站,是中国权威的中文网站分类目录,给站长提供免费网址目录提交收录和推荐最新最全的优秀网站大全是名站导航之家

    www.at-lib.cn
  • 中国链接目录中国链接目录

    中国链接目录简称链接目录,是收录优秀网站和淘宝网店的网站分类目录,为您提供优质的网址导航服务,也是网店进行收录推广,站长免费推广网站、加快百度收录、增加友情链接和网站外链的平台。

    www.cnlink.org
  • 35目录网35目录网

    35目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向35目录推荐、提交优秀网站。

    www.35mulu.com
  • 就要爱网站目录就要爱网站目录

    就要爱网站目录,按主题和类别列出网站。所有提交的网站都经过人工审查,确保质量和无垃圾邮件的结果。

    www.912219.com
  • 伍佰目录伍佰目录

    伍佰网站目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向伍佰目录推荐、提交优秀网站。

    www.wbwb.net