• 一步一步学JVM-Class文件


    Class类文件的结构

             Class文件是一组以8字节为基础单位的二进制流。当遇到需要占用8字节以上空间的数据项时,则会按照高位在前的方式分割成若干个8位字节进行存储。

             根据Java虚拟机规范的规定,Class文件格式采用一种类似于C语言结构体的伪结构来存储数据,这种伪结构中有两种数据类型:无符号书和表。

             无符号数属于基本的数据类型,用来描述数字、索引引用、数据值或者按照UTF-8编码构成字符串值。

             表是由多个无符号数或者其他表作为数据项构成的符合数据类型。

    魔数与Class文件的版本

             每个Class文件的4个字节成为魔数,它的唯一作用是确定这个文件是否为一个能被虚拟机接收的class文件。

             紧接着魔数的4个字节存储的是Class文件的版本号:第5和第6字节是次版本号,第7好第8字节是主版本号。

    常量池

             紧接着主次版本号之后的是常量池入口,常量池可以理解为Class文件之中的资源仓库,它是Class文件结构中与其他项目关联最多的数据类型,也是占用Class文件最大的数据项目之一。

             常量池中主要存放两大类常量:字面量和符号引用。字面量比较接近与Java语言层面的常量概念,如文本字符串、声明为final的常量值等。

             而符号引用包含了下面三个常量

    1、  类和接口的全限命名

    2、  字段的名称和描述符

    3、  方法的名称和描述符

    访问标志

             在常量池结束后,紧接着两个字节表示访问标志,这个标志用于识别一些类或者接口层次的访问信息,比如这个Class是类还是接口;是否定义为public类型,是否为abstract类型,如果是类的话,是否被声明为final累心等。

    类索引、父类索引与接口索引集合

             Class文件由这三项数据类确定这个类的继承关系。

    1、类索引用于确定这个类的全限命名。

    2、父类索引用于确定这个类的父类的全限命名。

    3、接口索引集合就用来描述这个类实现了哪些接口

    字段表集合

             字段表用于描述接口或者类中声明的变量。字段包括类级变量以及实例级变量,但不包括在方法内部声明的局部变量。

    方法表集合

             方法表的结构如同字段表一样,依次包括了访问标志、名称索引、描述符索引、属性表集合几项。

    属性表集合

             在Class文件、字段表、方法表中都可以携带自己的属性表集合,用于描述某些场景专有的信息。

  • 相关阅读:
    Linux 升级make (gmake)
    C库函数-calloc()
    redis若干命令 中文翻译
    centos7 安装xinetd,telnet
    vim 显示行号
    重启redis
    TS 过滤 .meta文件
    TS 判断为空
    TS 聚合查询 读取MongoDB
    windows 编译libuv库.txt
  • 原文地址:https://www.cnblogs.com/fhhk/p/7410711.html
Copyright © 2020-2023  润新知