美文网首页
JVM类文件结构

JVM类文件结构

作者: 疯狂的哈丘 | 来源:发表于2017-10-28 15:14 被阅读0次

JVM的类文件通俗讲就是编译后的class文件。由于文件名是可以任意更改的,所以我们不能说以.class为后缀的文件就是JVM的类文件。

JVM类文件的结构(二进制字节码文件)必须严格遵守JVM定下的规范。因此,只要字节码文件符合这个规范,不论这个字节码文件叫什么名字,放在哪里(磁盘还是网络传输或者其他方式生成),JVM都可以识别执行。

所以并不是只有编译java源码才可以得到JVM类文件,只要你有编译器,可以将任何语言编译成符合JVM规范的类文件。

JVM类文件结构

  • JVM前面4个字节必须是0xCAFEBABE,又称魔数。用来标识该文件是否是JVM类文件。
  • JVM类文件是没有分隔符的,各个数据紧凑排列
  • 大小使用u1、u2、u4、u8分别表示1字节、2字节、4字节和8字节
  • 书上和网上很多地方都说是以是一组以8字节为基础单位的二进制流,但是按我理解应该是以一个字节为基础单位,即8个bit为基础单位。

各个数据的具体顺序如下图:


JVM类文件各数据顺序图.png

各个数据块具体的介绍书上和网上都讲的很详细了,这里就不介绍了。

类文件常量池

以前一直很不理解常量池的概念。今天看了JVM的类文件结构这一张,对常量池终于有了个清晰的了解。

每个JVM类文件都有一个自己的常量池,存放类的类名,变量名,字符串,方法名等。我们可以通过索引得到这些描述。

这里注意一点,常量池表的下标是从1开始的。其他表都是从0开始。常量池表把下标0空出来是为了让满足后面某些指向常量池的索引值的数据在特定的情况下需要表达"不引用任何一个常量池项目"的含义。

字节码指令集

  • JVM字节码是由1个字节长度的操作码和零个或多个参数构成的(成为操作数)。
  • 由于操作码只占1个字节,所以JVM指令集不会超过256个(每个数字都代表某种操作)。目前JVM指令集已经有200多个了。
  • 大多数指令都没有操作数,需要有操作数的指令它的操作数都会紧随其后。

类文件结构详解:
http://blog.csdn.net/ochangwen/article/details/51457398

相关文章

  • JVM类加载学习二-类加载机制学习

    JVM类加载机制 @(Java)[JVM|类文件结构] [TOC] 基本介绍 JVM的类加载机制:JVM把描述类的...

  • JVM类文件结构

    JVM的类文件通俗讲就是编译后的class文件。由于文件名是可以任意更改的,所以我们不能说以.class为后缀的文...

  • 【JVM】类文件结构

    Class文件是一组以8位字节为基础单位的二进制流,各个数据项目按照顺序紧凑地排列在Class文件中,中间没有任何...

  • JVM类文件结构

    Class文件 Class 文件是一组以字节为基础单位的进制流 两种数据类型 无符号数,属于基本数据类型, u1,...

  • 深入JVM内核8 类连接和初始化

    1.类连接 1.1 类连接主要验证的内容 类文件结构检查:按照JVM规范规定的类文件结构进行 元数据验证:对字节码...

  • JVM执行系统

    2.10 JVM执行系统 2.10.1 类文件结构 JVM是不和Java语言强绑定的,它只与Class文件这种特定...

  • 图解jvm--(三)类加载与字节码技术

    类加载与字节码技术 1.类文件结构 根据 JVM 规范,类文件结构如下 2.字节码指令 指令作用iconst_1i...

  • JVM相关 : 3. 类加载和字节码

    1. 类文件结构 根据jvm规范,类文件结构如下: 1.1 魔数 0~3 字节,表示它是否是 class 类型的文...

  • Java 底层机制

    JVM体系结构 JVM是一种解释执行class文件的规范技术。 JVM体系结构 我翻译的中文图: 中文图 类装载器...

  • 热修复与插件化基础——Java与Android虚拟机

    一、Java虚拟机(JVM) 1、JVM整体结构 使用javac将java文件编译成class文件。 类加载器(C...

网友评论

      本文标题:JVM类文件结构

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