每一个class文件对应一个类或者接口,但是一个类或者接口不一定生成class文件,classloader直接生成。

  1. 8为字节为基础的二进制流,各个数据项按照严格的顺序排列在class文件中,没有任何分隔符,当遇到需要占用8位字节以上的数据项时,则会按照高位在前(或低位在前)方式分割为若干个8位字节存储。Big-Endian Little-Endian。
  2. 类似C语言结构体的微结构来存储数据,只包含无符号数和表两种结构。
    • 无符号数:u1,u2,u3,u4代表响应字节大小的无符号数,用来描述数字,索引引用,数量值(数字的值)或者按照UTF-8编码的字符串值。
    • 表:由无符号数和其它标组成的符合数据类型。class本质上就是一张表

  • 魔数和Class文件版本:
    class文件的头四个字节成为魔数(oxCAFEBABY),确定是否可以被虚拟机接受,多数文件存储标准都采用这个形式。紧接着的四个字节为版本号,5和6为此版本号(Minor Version),7和8为主版本号(Major Version),版本号从45开始,JDK1.1之后每个大版本发布,主版本号加1.
  • 常量池(大小不定):class文件的资源仓库,占用空间比较大,和其它数据项交互多,第一个出现表类型数据的数据项。

    • u2类型容量计数constant_pool_count,1开始,0项常量空出,指代不引用任何一个常量项目;
    • 数据类型:字面量(Literal)---接近常量概念,文本字符,final变量;符号引用(加载class文件是进行动态链接)---类和借口的全限定名、字段的名称和描述符、方法的名称和描述符。
    • 常量池中每一个常量都是一个表,u1标志位标识属于哪种数据类型。11 + 3.
  • 访问标志(2字节):
  • 类索引、父类索引与接口索引集合:

    • 类索引(this_class):u2数据类型,确定类的全限定名,
    • 父类索引(super_class):u2数据类型,确定父类全限定名,只有一个(单继承),除了Object,其它都有父类,父类索引不为0,
    • 接口索引(interfaces):u2类型数据集合,实现的接口,按照implements后的顺序排列在接口索引集合中,第一项u2为接口计数器(interfaces_count)标识索引表容量,没有则为0
  • 字段表(field_info)集合:类或者接口生命的变量,包括类级及接口级变量,不包含局部变量。
    • name_index(常量池引用):字段简单名称(没有类型和参数修饰符的方法或者字段名称, 对比权限定名--com/xxx/xxx;)
    • descriptor_index(常量池引用):字段描述符,字段数据类型,方法参数列表(数量、类型、顺序)和返回值(保持先后顺序)
      字段二维数组描述:String[][]=>[[Ljava/lang/String;方法描述符:int getIndex(String[], String ele)=>([Ljava/lang/StringLjava/lang/String)I
  • 方法表集合:...
  • 属性表集合:...

JVM之Class文件结构的更多相关文章

  1. 深入理解JVM(六)类文件结构

    6.1 关于类文件 1.class文件的一次编译,到处运行的跨平台性: 2.JVM不止有跨平台性,还有跨语言性,不管是JRuby还是Groovy写出来的程序,只要编译出符合JVM规范的class文件就 ...

  2. JVM(4) 类文件结构

    一.实现“平台无关性” 字节码(ByteCode)存储格式和虚拟机是实现语言无关性的基础.Java虚拟机不和包括Java在内的任何语言绑定,它只与“Clas”文件这种特定的二进制文件格式所关联,Cla ...

  3. JVM初探之类文件结构

    java 的 .class 文件字节码如图:Class 文件是一组以8字节为基础单位的二进制流,各个数据项目有着严格的结构.下面我们介绍下class文件的结构. 魔数 class文件的头4个字节是魔数 ...

  4. JVM小结--类文件结构

    字节码是构成Java平台无关性的基石.实现语言无关性的基础是虚拟机和字节码存储格式. Java语言中的各种变量.关键字和运算符的语义最终是由多条字节码命令组成,因此字节码命令所能提供的语义描述能力肯定 ...

  5. 【JVM】虚拟机类加载机制

    什么是类加载 虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制. <[JVM]类文件结构& ...

  6. Java Class文件详解

    作者:禅楼望月(http://www.cnblogs.com/yaoyinglong) Java Class文件中包含以下信息: [+]view code ClassFile { u4 magic;  ...

  7. 我的阿里之路+Java面经考点

    我的阿里之路+Java面经考点 时间:2018-03-19 23:03  来源:未知   作者:admin   点击:87次 我的2017是忙碌的一年,从年初备战实习春招,年三十都在死磕JDK源码,三 ...

  8. JVM基础系列第5讲:字节码文件结构

    温馨提示:此篇文章长达两万字,图片50多张,内容非常多,建议收藏后再看. 前面我们说到 Java 虚拟机使用字节码实现了跨平台的愿景,无论什么系统,我们都可以使用 Java 虚拟机解释执行字节码文件. ...

  9. JVM学习04:类的文件结构

    JVM学习04:类的文件结构 写在前面:本系列分享主要参考资料是  周志明老师的<深入理解Java虚拟机>第二版. 类的文件结构知识要点Xmind梳理

随机推荐

  1. 使用普通用户替代root来管理IEE

    环境:RHEL 6.4 + IEE 4.0.6 需求:IEE数据库之前是使用root用户部署和管理的,现在安全加固,将数据库交给普通用户iee来管理. 一.当前环境 二.安全加固 1.创建iee用户 ...

  2. 用react的ReactCSSTransitionGroup插件实现简单的弹幕动画

    1,开始的思路 公司想做直播方面的项目,并想加入弹幕的功能,直播的页面已经作为一个组件放在了用react+redux写好的一个网站项目上.所以技术老大让我研究下如何用react实现弹幕的功能.下面我就 ...

  3. AnagularJs之directive

    前言: 昨日周六,再登梧桐山.六点半,起.未到顶,雨纷飞.冒雨行,终封顶,只为合照一张.五点半,下山行.聆听大自然的律动,双腿随其自然而颤抖!今早起,我的双腿犹如叛逆期的少年,或如领家的孩童,遂决定今 ...

  4. 利用js2image把代码压缩成圣诞树

    马上圣诞节了,作为一名程序猿,如何体现自己独特的过节风格,如何在朋友圈发一张专属自己的祝福照片我觉得很有必要,你们说是不是. 谈到圣诞节,话说程序猿和圣诞之间的关系还有这么一个笑话: Q:程序员为什么 ...

  5. ActiveX(一)第一个简单的Demo

    说道ActiveX,我的第一直觉就是Flash,利用ActiveX.我们可以创建丰富的可交互式应用程序.同时.利用ActiveX特性.我们可以实现Js 与 ActiveX 的无缝连接(包括数据共享.和 ...

  6. Matches正则使用提取内容

    用VS新建WinForm程序,窗体上是三个文本框和一个按钮.可以自己构造正则表达式,自己修改匹配内容 正则表达是要提取的部分为hewenqitext 代码如下: using System; using ...

  7. 常用的WebForm 控件

    首先回忆一下Html页中的12个表单元素 .文本类 文本框 <input type="text" id="" name="" valu ...

  8. sqlserver 多库查询 sp_addlinkedserver使用方法(添加链接服务器)

    sqlserver 多库查询 sp_addlinkedserver使用方法(添加链接服务器) 我们日常使用SQL Server数据库时,经常遇到需要在实例Instance01中跨实例访问Instanc ...

  9. WinServer远程部署系统打包批处理文件

    前言 工作中一直在使用一个部署系统WinServer远程部署系统(RDSystem),部署.回滚都很方便.我们一直都是增量发布或者只更新需要更新的文件,每次发布完之后要整理出一个增量更新包,压缩成zi ...

  10. 【工业串口和网络软件通讯平台(SuperIO)教程】一.通讯机制

    1.1    应用场景 通讯平台的交互对象包括两方面:第一.与硬件产品交互.第二.与软件产品交互.基本这两方面考虑,通讯平台一般会应用在两个场景: 1)通讯平台应用在PC机上 主要应用在自动站的工控机 ...