本系列博客我们将以当前默认的主流虚拟机HotSpot 为例,详细介绍 Java虚拟机。以 JDK1.7 为主,同时介绍与 JDK1.8 的不同之处,通过Oracle官网以及各种文献进行整理,并加以验证,力求保证这块知识的正确性,完整性。
以下是本系列博客参考的相关文档:
①、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高级特性与最佳实践》
④、陈涛老师:《HotSpot实战》
1、Oracle Java SE 8 产品组件通过上面给定的地址,我们可以看到如下这张图:
通常来说 Java平台标准版(Java SE)包括 Java SE开发工具包(JDK)和Java SE运行时环境(JRE)。
JRE提供了运行以Java编程语言编写的applet和应用程序所必需的库,Java虚拟机和其他组件;JDK包括JRE以及编译器和调试器等命令行开发工具,可以用来开发Java应用程序 。
PS:JDK包含JRE,我们通常安装JDK的同时也会安装JRE。
2、虚拟机上图的最下一行Java虚拟机是被 JRE 所包含,我们在介绍Java虚拟机时,先了解虚拟机的概念。
所谓虚拟机,其实就是一台虚拟的机器,可以用来执行一系列虚拟的命令。大体上虚拟机可以分为两种:系统虚拟机和程序虚拟机。
①、系统虚拟机:是完全对物理计算机的仿真,可以说和一台真实的PC操作系统没什么区别。比如常用的 Vmare 以及 Visual Box 软件,通过这些软件能够模拟出具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。
②、程序虚拟机:专门为执行单个计算程序而产生,最典型的就是Java虚拟机,在Java虚拟机中执行字节码文件命令。
3、Java虚拟机了解了什么是虚拟机,我们再看什么是 Java虚拟机。
Java虚拟机可以看做是一台抽象的计算机,如同真实的计算机那样,它有自己的指令集以及各种运行时内存区域,它与Java语言没有必然的联系,只与特定的二进制文件——class 文件格式关联(字节码文件),可以通过Java语言或者其他语言编写的程序编译成class文件,然后在Java虚拟机上运行。Java虚拟机有以下二个特点:
①、语言无关
Java虚拟机只和class文件关联,所以只要你编写程序的语言能够编译成class文件,那么都能够在Java虚拟机上运行。
②、平台无关
Java从诞生之初就宣传的一个口号:一次编写,到处运行。
也就是说Java是一个跨平台的语言,那么Java是如何实现跨平台的呢?
其实Java之所以跨平台是因为Java虚拟机的适配,不同的系统实现不同的Java虚拟机。Java虚拟机就相当于操作系统和应用程序之间的中介,每种平台安装适应该平台的Java虚拟机,那么我们编写的程序当然能够在任意平台运行。
4、Java虚拟机种类
商用虚拟机:
①、Sun HotSpot
该虚拟机性能优越,是 sun JDK1.3 及以后所有 sun JDK 版本默认的虚拟机,使用最为广泛,本系列博客就是以这个虚拟机为平台进行介绍。