在本系列博客中,我们将以目前默认的主流虚拟机HotSpot为例,详细介绍Java虚拟机。以JDK1.7为重点,同时介绍与JDK1.8的不同之处,通过Oracle官网和各种文档进行整理和验证,力求保证这块知识的正确性和完整性。 以下为本系列博客相关参考文档: ①、JDK1.7虚拟机规范:https://docs.oracle.com/javas... JDK1.8虚拟机规范:https://docs.oracle.com/javas... ②,OracleJavaSE8产品组件:https://docs.oracle.com/javas... ③,周先生志明:《深入理解Java虚拟机:JVM高级特性与最佳实践》 ④。陈涛老师:《HotSpot实战》1。OracleJavaSE8产品组件 通过上面给出的地址,我们可以看到如下图: 一般来说,JavaPlatformStandardEdition(JavaSE)包括JavaSEDevelopmentKit(JDK)和JavaSERuntimeEnvironment(JRE)。 JRE提供运行Java编程语言编写的小程序和应用程序所需的库、Java虚拟机和其他组件;JDK包括JRE和编译器、调试器等命令行开发工具,可用于开发Java应用程序。 PS:JDK中包含JRE,我们一般在安装JDK的同时安装JRE。2.虚拟机 上图最下面一行的Java虚拟机是JRE自带的。我们在介绍Java虚拟机的时候,首先要了解虚拟机的概念。 所谓虚拟机,其实就是一个虚拟机,可以用来执行一系列虚拟命令。一般来说,虚拟机可以分为两种:系统虚拟机和程序虚拟机。 ①、系统虚拟机:是对物理计算机的完整模拟,可以说与真实的PC操作系统没有区别。例如常用的Vmare和VisualBox软件,可以通过这些软件模拟出一个完整的计算机系统,具有完整的硬件系统功能,运行在完全隔离的环境中。 ②、程序虚拟机:是专门为执行单个计算程序而产生的,最典型的就是Java虚拟机,在Java虚拟机中执行字节码文件命令。3.Java虚拟机 了解什么是虚拟机,下面就来看看什么是Java虚拟机。 Java虚拟机可以看作是一台抽象的计算机。就像真正的计算机一样,它有自己的指令集和各种运行时内存区域。它与Java语言没有必然联系,只与特定的二进制文件——类文件格式关联(字节码文件)可以被Java语言或其他语言编写的程序编译成类文件,然后运行在Java虚拟机。Java虚拟机有以下两个特点: ①、语言无关 Java虚拟机只和class文件关联,所以只要你写程序的语言都能编译成class文件,然后就可以在Java虚拟机上运行了。 ②,平台无关 Java从一开始就宣扬着一个口号:writeonce,runeverywhere。 也就是说,Java是一种跨平台的语言,那么Java是如何实现跨平台的呢? 其实Java之所以跨平台,是因为Java虚拟机的适配,不同的系统实现了不同的Java虚拟机。Java虚拟机相当于操作系统和应用程序之间的中介。每个平台都安装了与该平台适配的Java虚拟机,那么我们写的程序当然可以在任何平台上运行。 4。Java虚拟机的种类 商业虚拟机: ①、SunHotSpot 该虚拟机性能优越,是sunJDK1.3及以后所有sunJDK版本的默认虚拟机。它的使用最为广泛,本系列博客就是以这个虚拟机为平台进行介绍。 ②、BEAJRockit JRockit虚拟机是BEA在2002年从AppealVirtualMachines手中收购的一款虚拟机,是针对服务器硬件和服务器端使用场景高度优化的虚拟机。它曾被誉为“世界上最快的虚拟机”。因为它专注于服务器端应用,所以它内部没有解析器的实现,所有的代码都是由一个即时编译器编译执行的。 ③、IBMJ9 J9虚拟机是IBM自主研发的高性能虚拟机。它不单独销售,而是作为IBM各种产品的执行平台。IBM将其定义为一个适应性强、可移植性强的Java运行时平台,从嵌入式设备到大型企业应用程序。 ④,SunClassic 这个虚拟机很原始。它是JDK1.0时代使用的Java虚拟机,是各种虚拟机的鼻祖。运行方式。 ⑤、太阳精确 这是除HotSpot之外的另一个Sun虚拟机。在JDK1.2时代曾短暂投入商业使用。它与HotSpot同时开发,但最终被HotSpot取代。 ⑥、ApacheHarmony Harmony是一个开源的、独立的、虚拟机实现,实际上兼容Apache软件基金会领导的JDK1.5和JDK1.6。它间接催生了GoogleAndroid平台上的Dalvik虚拟机。Android对手机的影响力有多大不言而喻。它已经是最成功的数字设备通用平台。但由于其TCK授权问题,直接导致了Apache与Oracle的决裂,从而退出了JCP的组成。这是现代Java阵营遭遇的最严重的分裂危机。 嵌入式虚拟机 ①、Dalvik Dalvik虚拟机是谷歌等厂商开发的Android移动设备平台的核心组件之一。它执行dex(Dalvik可执行文件)文件而不是类文件。使用了寄存器架构而不是栈架构,但其开发体系与Java有着千丝万缕的联系,而且Java的大部分API都可以直接使用,可以直接由class文件转换为dex文件。并且在Android2.2中,提供了实时编译器的实现,性能有了很大的提升。 ②、KVM 在Android、IOS等智能手机操作系统出现之前,是手机平台上广泛使用的虚拟机。 ③、CDC/CLDCHotSpot CDC和CLDCHotSpot分别是Sun针对高端嵌入式设备和低端嵌入式设备的虚拟机,用于替代KVM。
