Java虚拟机详解(一)------简介

  本系列博客咱们将以当前默认的主流虚拟机HotSpot 为例,详细介绍 Java虚拟机。以 JDK1.7 为主,同时介绍与 JDK1.8 的不一样之处,经过Oracle官网以及各类文献进行整理,并加以验证,力求保证这块知识的正确性,完整性。html

  如下是本系列博客参考的相关文档:java

  ①、JDK1.7虚拟机规范:https://docs.oracle.com/javase/specs/jvms/se7/html/index.html编程

    JDK1.8虚拟机规范:https://docs.oracle.com/javase/specs/jvms/se8/html/index.html服务器

  ②、Oracle Java SE 8 产品组件:https://docs.oracle.com/javase/8/docs/index.html架构

  ③、周志明老师:《深刻理解Java虚拟机:JVM高级特性与最佳实践》oracle

  ④、陈涛老师:《HotSpot实战》app

一、Oracle Java SE 8 产品组件

  经过上面给定的地址,咱们能够看到以下这张图:jvm

  

  一般来讲 Java平台标准版(Java SE)包括 Java SE开发工具包(JDK)和Java SE运行时环境(JRE)。编程语言

  JRE提供了运行以Java编程语言编写的applet和应用程序所必需的库,Java虚拟机和其余组件;JDK包括JRE以及编译器和调试器等命令行开发工具,能够用来开发Java应用程序 工具

  PS:JDK包含JRE,咱们一般安装JDK的同时也会安装JRE。

二、虚拟机

  上图的最下一行Java虚拟机是被 JRE 所包含,咱们在介绍Java虚拟机时,先了解虚拟机的概念。

  所谓虚拟机,其实就是一台虚拟的机器,能够用来执行一系列虚拟的命令。大致上虚拟机能够分为两种:系统虚拟机和程序虚拟机。

  ①、系统虚拟机:是彻底对物理计算机的仿真,能够说和一台真实的PC操做系统没什么区别。好比经常使用的 Vmare 以及 Visual Box 软件,经过这些软件可以模拟出具备完整硬件系统功能的、运行在一个彻底隔离环境中的完整计算机系统。

  ②、程序虚拟机:专门为执行单个计算程序而产生,最典型的就是Java虚拟机,在Java虚拟机中执行字节码文件命令。

三、Java虚拟机

  了解了什么是虚拟机,咱们再看什么是 Java虚拟机。

  Java虚拟机能够看作是一台抽象的计算机,如同真实的计算机那样,它有本身的指令集以及各类运行时内存区域,它与Java语言没有必然的联系,只与特定的二进制文件——class 文件格式关联(字节码文件),能够经过Java语言或者其余语言编写的程序编译成class文件,而后在Java虚拟机上运行。Java虚拟机有如下二个特色:

  ①、语言无关

  Java虚拟机只和class文件关联,因此只要你编写程序的语言可以编译成class文件,那么都可以在Java虚拟机上运行。

  

 

  ②、平台无关

  Java从诞生之初就宣传的一个口号:一次编写,处处运行。

  也就是说Java是一个跨平台的语言,那么Java是如何实现跨平台的呢?

  其实Java之因此跨平台是由于Java虚拟机的适配,不一样的系统实现不一样的Java虚拟机。Java虚拟机就至关于操做系统和应用程序之间的中介,每种平台安装适应该平台的Java虚拟机,那么咱们编写的程序固然可以在任意平台运行。

  

四、Java虚拟机种类

  商用虚拟机:

   ①、Sun HotSpot

  该虚拟机性能优越,是 sun JDK1.3 及之后全部 sun JDK 版本默认的虚拟机,使用最为普遍,本系列博客就是以这个虚拟机为平台进行介绍。

  

  ②、BEA  JRockit

  JRockit 虚拟机是 BEA 公司于 2002 年从 Appeal Virtual Machines 收购得到的虚拟机。它是一款面向服务器硬件和服务端使用场景高度优化过得虚拟机,曾经号称是“世界上速度最快的虚拟机”。因为专一于服务端应用,它的内部不包含解析器的实现,所有代码都靠即时编译器编译后执行。

  ③、IBM J9

  J9 虚拟机是 IBM 公司单独开发的高性能虚拟机,它并不独立出售,而是做为 IBM 公司各类产品的执行平台,IBM 把它定义为一个能够适应从嵌入式设备到大型企业级应用的、高可移植性的Java运行平台。

  ④、Sun Classic 

  这个虚拟机很原始,是 JDK1.0 时代使用的Java虚拟机,是各类虚拟机的鼻祖,它的内部不存在即时编译器,只能使用纯解释的方式运行。

  ⑤、Sun Exact 

  这是 Sun 公司在 HotSpot 以外的另外一个虚拟机,在 JDK1.2 时代曾短暂的投入过商用,它和 HotSpot 同时开发,但最终被 HotSpot 取代。

  ⑥、Apache Harmony 

  Harmony 是 Apache 软件基金会主导的、开源的、独立的、实际兼容与 JDK1.5 和 JDK1.6的虚拟机实现,它间接催生了 Google Android 平台的 Dalvik 虚拟机,Android 的影响力如今有多大不用多说,目前已是最成功的的数码设备通用平台。可是因为它的 TCK 受权问题,直接致使 Apache 与 Oracle 的决裂,从而退出了 JCP 组成,这是近代 Java 阵营遇到的最严重的分裂危机。

  嵌入式虚拟机

  ①、Dalvik

  Dalvik 虚拟机是 Google 等厂商合做开发的 Android 移动设备平台的核心组成部分之一,它执行 dex(Dalvik Executable) 文件而不是 class 文件,使用寄存器架构而不是栈架构,可是它的开发体系与Java有着千丝万缕的关系,能够直接使用大部分的 Java API、dex 文件能够直接从class文件转化而来。而且在 Android 2.2 中提供了即时编译器的实现,性能大大的提升。

  ②、KVM

  在 Android、IOS 等智能手机操做系统出现以前,曾普遍应用于手机平台的一种虚拟机。

  ③、CDC/CLDC HotSpot

  CDC和 CLDC HotSpot 分别是 Sun 针对高端嵌入式设备和中低端嵌入式设备的虚拟机,用来代替 KVM。

相关文章
相关标签/搜索