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的开发的工具等。