首页 > 技术文章 > 初识JVM

JadeDragonhuxy 2021-03-28 18:17 原文

JVM

      1.什么是JVM?

                      JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。

               当然,这是一个课本上的概念。看到这个解释除了能知道JVM是Java Virtual Machine的缩写,其他的还是一团雾水,那么JVM到底是什么呢。在解释JVM之前先来看一下JAVA从编码到执行的过程。

              JAVA从编码到执行

               

 

                     初学者都知道,JAVA编码完成后得到的是x.java文件,x.java文件通过javac命令的编译后会在x.java文件的同级目录中生成一个新的x.class文件。然后通过执行java命令就能得到代码中需要实现的内容。

              那么,执行java命令后计算机是怎么去执行的呢。

                     就如上图所示,执行java命令后主要分为这样的几步:

                            1. 首先,classLoader会将这个class文件加载到内存,与此同时,也会将代码中需要用到的一些Java类库也加载到内存中;

                            2. 加载到内存中的内容会被字节码解释器或者JIT(即使编译器)解释成汇编指令;

                            3. 由执行引擎执行指令,并与操作系统进行交互。

               以上,实现将class文件加载到内存,并进行解释,最后执行的这一系列操作的东西,我们就称之为JVM。

      2.从跨平台的语言到跨语言的平台

      我们都知道JAVA是跨平台的语言,其跨平台体现在只需要一次编译,编译成class文件,只需要在不同的平台中安装好对应的JVM,编译好的class文件就能在不同的平台上运行。

          其实,JVM也是一个跨语言的平台。

               

 

           跨语言的平台就是说,任何语言只要可以编译成class文件。符合class文件的规范就都能在JVM上运行。并不是JVM只能运行JAVA。JVM与JAVA无关。

                                                                                                                 

           1. JVM是一种规范,在官方文档中有具体规范说明。

      官网文档地址:https://docs.oracle.com/javase/specs/index.html

          2. 虚构出来的计算机。

                - 汇编语言(字节码)指令集

                - 内存管理:堆  栈  方法区等

      3.常见的JVM实现

      1. Hotspot     oracle官方,也是我们常用的JVM;通过Java -version命令就能查看使用的是HotSpot(TM) 64-Bit Server VM这样的一个64位的虚拟机。

                           

                  2. Jrockit    BEA,曾经号称是世界上最快的JVM;后来被Oracle收购,合并于HotSpot中

                  3. J9     IBM开发的一个JVM

          4. Microsoft VM    Microsoft开发的一个虚拟机

                  5. TaobaoVM     HotSpot的一个深度定制版;淘宝,天猫都使用的是此JVM

                  6. LiquidVM      直接针对硬件的一个虚拟机

                  7. azul  zing      最新垃圾回收的业界标杆,非常快;官方网址:https://www.azul.com/    

                        HotSpot就是参考azul zing的垃圾回收实现,才开发出来ZGC。

      4.JDK  JRE   JVM

                                          

 

              JVM是Java语言的运行环境,是一种虚拟的跨语言的运行平台;而JRE则是由JVM和Java的核心类库组成;JDK则包含了JRE以及一些Java的开发的工具等。          

 

推荐阅读