一、概述
1.1 虚拟机定义
定义:模拟某种计算机体系结构,执行特定指令集的软件
1.2 虚拟机分类
主要分为两大类:一种是系统虚拟机(Virtual Box、VMware),另一种是程序虚拟机(JVM、.NET CLR、P-Code)。
P-Code:由加州大学圣地亚哥分校(University of California, San Diego,UCSD)于1978年发布的高度可移植、机器无关的、运行Pascal语言的虚拟机
1.3 java虚拟机概述
Java语言虚拟机
可以执行 Java 语言的高级语言虚拟机。 Java 语言虚拟机并不一定就可以称为 JVM,譬如:Apache Harmony。
Java™ 虚拟机
- 必须通过 Java TCK(Technology Compatibility Kit)的兼容性测试的Java语言虚拟机才能称为
- “Java™ 虚拟机”
- Java™ 虚拟机并非一定要执行“Java”程序
- 业界三大商用 JVM:Oracle HotSpot 、 Oracle JRockit VM、IBM J9 VM
- 其他虚拟机:Google Dalvik VM、Microsoft JVM
Java虚拟机是整个Java平台的基石,是Java技术用以实现硬件无关与操作系统无关的关键部分,是Java语言生成出极小体积的编译代码的运行平台,是保障用户机器免于恶意代码损害的保护屏障。
Java虚拟机可以看作是一台抽象的计算机。如同真实的计算机那样,它有自己的指令集以及各种运行时内存区域。使用虚拟机来实现一门程序设计语言有许多合理的理由,业界中流传最为久远的虚拟机可能是UCSD Pascal的P-Code虚拟机。
第一个Java虚拟机的原型机是由Sun Microsystems公司实现的,它被用在一种类似PDA(Personal Digital Assistant,俗称掌上电脑)的手持设备上仿真实现Java虚拟机指令集。时至今日,Oracle已有许多Java虚拟机实现应用于移动设备、桌面电脑、服务器等领域。Java虚拟机并不局限于特定的实现技术、主机硬件和操作系统,Java虚拟机也不局限于特定的代码执行方式,它不强求使用解释器来执行程序,也可以通过把自己的指令集编译为实际CPU的指令来实现,它可以通过微代码(Microcode)来实现,或者甚至直接实现在CPU中。
Java虚拟机与Java语言并没有必然的联系,它只与特定的二进制文件格式——Class文件格式所关联,Class文件中包含了Java虚拟机指令集(或者称为字节码、Bytecodes)和符号表,还有一些其他辅助信息。
基于安全方面的考虑,Java虚拟机要求在Class文件中使用了许多强制性的语法和结构化约束,但任一门功能性语言都可以表示为一个能被Java虚拟机接收的有效的Class文件。作为一个通用的、机器无关的执行平台,任何其他语言的实现者都可以将Java虚拟机作为他们语言的产品交付媒介。
译者注:由加州大学圣地亚哥分校(University of California, San Diego,UCSD)于1978年发布的高度可移植、机器无关的、运行Pascal语言的虚拟机。
1.4 java虚拟机架构
- Class Loader 类加载器
- Execution Engine 执行引擎
- Native Interface本地接口
- Runtime data area运行时数据区
1.5 java虚拟机的具体实现
Oracle HotSpot 虚拟机
最初由名为“Longview Technologies”的小公司开发,后被 Sun 公司收购。最初并非面向 Java 语言开发,而是面向 Strongtalk 语言。
HotSpot 命名来自它的“热点代码探测”技术。
从 JDK 1.2 开始加入 Sun(Oracle)JDK,在 JDK 1.3 开始成为 Sun(Oracle)JDK 的默认实现,在1.4中成为唯一的虚拟机。
在2006年底开始开源,由此建立的 OpenJDK 项目。
本系列课程中所有的虚拟机实现,所指的都是 Oracle HotSpot