本规范描述的是一种抽象化的虚拟机的行为,而不是任何一种(译者注:包括 Oracle 公司自己的 HotSpot 和 JRockit 虚拟机)被广泛使用的虚拟机实现. 记住:JVM规范是一种高度抽象行为的描述,而不是具体虚拟机的实现. 所有在虚拟机规范之中没有明确描述的实现细节,都不应成为虚拟机设计者发挥创造性的牵绊,设计者可以完全自主决定所有规范中不曾描述的虚拟机内部细节,例如:运行时数据区的内存如何布局.选用哪种垃圾收集的算法.是否要对虚拟机字节码指令进行一些内部优化操作(如使用即时编译器把字…
一条 Java 虚拟机指令由一个特定操作的操作码和零至多个操作所使用到的操作数所构成. 虚拟机指令 = 操作码 + 操作数. 其中,操作码值分别为 254(0xfe)和 255(0xff),助记符分别为 impdep1 和 impdep2的两个操作码是作为"后门"和"陷阱"出现,目的是在某些硬件和软件中提供一些与实现相关的功能.第三个操作码值分别为 202(0xca).助记符为 breakpoint 的操作码是用于调试器实现断点功能. 三个保留操作码: 254(0x…
Oracle 的 JDK 包括两部分内容:一部分是将 Java 源代码编译成 Java 虚拟机的指令集的编译器,另一部分是用于Java 虚拟机的运行时环境. 第一部分应该说的是 Javac 这个前置编译器,用于将Java源代码编译成字节码.第二部分是说 JIT 即时编译器,用于在JVM运行时进行进一步优化,将字节码编译成本地机器码. 即时代码生成器(Just-In-Time/JIT Code Generator)就是一种在 Class 文件中的代码被 Java 虚拟机代码加载后,生成与平台相关的…
如果你还没下载<Java虚拟机规范>这本书,那么先点击这里下载再一块儿看吧. 前言 Java 虚拟机是一个抽象化的机器,整个规范中提及的 Java 虚拟机都是抽象化的概念,而不是特指 Oracle 或者其他某一间公司的 Java 虚拟机实现. 可以看到JVM其实就是一个虚拟机的机器,与我们的普通PC一样,有内存.有CPU.JVM的内存就是运行时数据区,其CPU就是Java虚拟机指令集. 另外,我们还修正了许多<Java 虚拟机规范(第一版)> 和<Java 语言规范>…
这一章节讲的是字节码的整个组成格式,读懂了这一章,就读懂了字节码文件.对于这一章的学习,我更推荐作为工具书去查找.最好是找一个最简单的Hello World例子,一个字节一个字节去分析其含义.在分析过程中,把这个章节当成工具来查询每个字节的含义. 我写了一篇文章来带你一个字节一个字节分析,有兴趣的可以看:JVM系列第5讲:字节码文件结构 Java 虚拟机实现会在文件的链接阶段(§ 5.4)对 Class 文件进行必要的校验. 看到这里,知道JVM会在文件的链接阶段,做JDK版本的校验. 这个章节…
加载是根据特定名称查找类或接口类型的二进制表示(Binary Representation),并由此二进制表示创建类或接口的过程. 加载,就是指去寻找类或接口的过程. 链接是为了让类或接口可以被 Java 虚拟机执行,而将类或接口并入虚拟机运行时状态的过程. 链接,就是将类或接口与JVM链接起来的过程. 类或接口的初始化是指执行类或接口的初始化方法(§ 2.9) 初始化,就是执行方法的过程. Java 虚拟机为每个类型都维护一个常量池. 这里注意关键词「每个类型」,也就是说整型是一个常量池,字符…
看到这里,我相信大家对于一个 Java 源文件是如何变成字节码文件,以及字节码文件的含义已经非常清楚了.那么接下来就是让 Java 虚拟机运行字节码文件,从而得出我们最终想要的结果了.在这个过程中,Java 虚拟机会加载字节码文件,将其存入 Java 虚拟机的内存空间中,之后进行一系列的初始化动作,最后运行程序得出结果. 那么字节码数据在 Java 虚拟机内存中是如何存放的 ?Java 虚拟机在为类实例或成员变量分配内存是如何分配的 ?要解答上面这些问题,我们首先需要了解一下 Java 虚拟机的…
说起 Java 虚拟机,许多人就会将其与 HotSpot 虚拟机等同看待.但实际上 Java 虚拟机除了 HotSpot 之外,还有 Sun Classic VM.Exact VM.BEA JRocketit.IBM J9 等等.今天我们就来简单回顾下 Java 虚拟机的发展历史. 虚拟机始祖:Sun Classic 在 1996 年 1 月 23 日,Sun 发布 JDK 1.0,其中自带的虚拟机就是 Classic VM.但这款虚拟机有个特点,即只能使用纯解释器的方式来执行 Java 代码,…
许多人知道类加载机制.JVM内存模型,但他们可能不知道什么是<Java虚拟机规范>.对于Java开发来说,<Java虚拟机规范>才是最为官方.准确的一个文档,了解这个规范可以让我们更深入地理解JVM.我们平常说的JVM其实更多说的是HotSpot(HotSpot是JVM规范的一种实现),但我们常常将HotSpot与JVM等同起来.正因对于JVM规范认识的不足,所以我专门准备一个系列的文章,带着大家读一读JVM规范. 在接下来的一系列文章中,我将带着大家一个章节一个章节解读<J…
我们花了几天的时间来阅读<Java虚拟机规范>,了解要实现一个虚拟机应该包括什么内容.通过这么一次阅读,我们大致了解了虚拟机规范的内容. 第1章.对Java虚拟机进行了一些简单的介绍. 第2章.介绍了虚拟机的结构,以及一些异常体系以及字节码指令集.可以说是规范的重点内容. 第3章.介绍了编译器是如何将Java源代码编译成JVM所需要的字节码的,如何去阅读这些字节码指令. 第4章.这一章针对字节码文件的格式做了详细的讲解,让我们了解字节码里的每一个字节的作用. 第5章.这一章对JVM是如何启动.…