JVM 源码分析(一):重新认识 Java 虚拟机

什么是虚拟机

提到虚拟机,很多人首先想到的是 VirtualBox、VMware Workstation 等虚拟机软件,没错,它们是一类虚拟机——完整指令集架构虚拟机。这类虚拟机提供了完整的硬件指令集架构的模拟,操作系统和应用程序在这个虚拟机上可以像真实计算机那样运行,因此,它们有时也被称为模拟器。

还有一类虚拟机——虚拟指令集架构虚拟机,它们经常被称为运行时系统或执行引擎。这类虚拟机提供了对某个虚拟指令集架构的模拟,例如模拟 JVM 指令集架构 的 Oracle Hotsport VM、模拟 CIL 指令集架构的 Microsoft .NET CoreCLR、模拟 Dalvik 指令集架构的 Google Android Dalvik 等等(由于 Dalvik 指令集架构仅仅是在 JVM 指令集架构的基础上做了一层优化,因此 Android Dalvik 也可以认为是一种 JVM)。

什么是 Java 虚拟机

如上所述,Java 虚拟机(JVM)是指对 JVM 指令集架构提供模拟与虚拟化的软件。JVM 指令集架构是在 Java 虚拟机规范中定义的。Java 虚拟机规范由虚拟指令集架构、执行模型、内存模型、线程模型、安全模型等部分组成。一个严格意义上的 Java 虚拟机是对 Java 虚拟机规范的完整实现。

在 JVM 指令集架构中,由于每个指令的操作码被编码为一个字节,因此 JVM 指令码也被称为 Java 字节码。

Java 字节码不一定由 Java 代码编译而来,许多其他语言(如 Kotlin、Groovy)也可以编译为 Java 字节码,只要编译结果符合 Java 虚拟机规范,就可以在 Java 虚拟机上运行。

Java 虚拟机有哪些

  • Oracle HotSpot VM

    Oracle HotSpot VM 是 Oracle JDK 和 OpenJDK 中采用的 Java 虚拟机,作为 Java 虚拟机规范的参考实现和官方实现,占据着绝对主流的地位。

  • IBM J9 VM / OpenJ9 VM

    IBM J9 VM 是捆绑在 IBM Websphere 等中间件中的 Java 虚拟机,OpenJ9 是其开源版本。IBM J9 VM 针对 IBM 公司自己的产品做了大量优化,通常与 IBM 公司的软硬件产品配合使用。

  • Oracle JRockit

    Oracle JRockit 是 Oracle 公司早先推出的一款 Java 虚拟机产品,不过自从 Oracle 公司收购 Sun 公司后,JRockit 项目很快就终止了。

  • Apache Harmony DRLVM

    Apache Harmony 是一个完全开源的完整的 Java 平台实现,DRLVM 是包含在其中的 Java 虚拟机。Google Android Dalvik 大量引用和借鉴了 Apache Harmony 的代码。原本该项目背后有着 IBM 和 Intel 的强力支持,然而不幸的是,在 Sun 公司的打压下,该项目已经于 2011 年终止。

以上四款 Java 虚拟机都至少在曾经有过一定的市场占有率,此外还有一些实验室产品,也可以拿来学习和使用。

Java 虚拟机与 JRE 和 JDK 的关系

  • Java 虚拟机是 Java 字节码的运行时系统,由执行引擎、垃圾收集器、类加载子系统等部件组成。
  • JRE 是 Java 程序的运行环境,它包含一个 Java 虚拟机和一组 Java 语言库。
  • JDK 是 Java 程序的开发环境, 它包含一个 JRE 和一套 Java 程序开发工具,如 Java 编译器(javac)、Java 字节码查看工具(javap)、JVM 监控工具(jvisualvm、jconsole)等。
posted @ 2021-01-11 09:55  张永恒  阅读(869)  评论(0编辑  收藏  举报