JVM(一)-JVM入门
JVM的定义:
JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。
跨平台性:
引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运
行的目标代码(字节码),也就是我们常说的.class文件,就可以在多种平台上不加修改地运行。当然,并不是java一种语言通过JVM实现跨平台性,还有scala、kotlin、groovy等等,这
些语言也都是跑在虚拟机上的。如下图所示:
跨平台性有一个误区,并不是同一个jvm可以在windows、linux等平台上运行,而是各种语言生成的class通过jvm执行后可以在不同的平台上运行,而效果是一样的。为什么能达到这样的目的,是因为jvm针对
不同的平台,提供了不同的实现,比如java的jdk包在windows上叫jdk-8u201-windows-x64.exe,在Linux上叫jdk-8u261-linux-x64.tar.gz。所以说,所谓的一处编译到处运行,并不是任何的平台都可以的,必须要JVM
支持的才行。
java编译执行概览:
从上图可以清晰的看到java程序的大致执行过程,首先将java文件通过JDK的工具javac编译成class字节码文件。然后通过JVM的类加载器、字节码解释器、JIP编译器等翻译成
硬件可以识别的机器码,最后通过硬件进行执行。通过上图也很清晰的对JDK、JRE和JVM进行的区分。
常见的JVM的实现:
可以通过jvm实现跨平台的语言有很多种,那么jvm又有多少种呢?
- Jrocket:原来属于BEA 公司,曾号称世界上最快的 JVM,后被 Oracle 公司收购,合并于 Hotspot。
- J9: IBM 有自己的 java 虚拟机实现,它的名字叫做 J9. 主要是用在 IBM 产品(IBM WebSphere 和 IBM 的 AIX 平台上)。
- TaobaoVM: 只有一定体量、一定规模的厂商才会开发自己的虚拟机,比如淘宝有自己的 VM,它实际上是 Hotspot 的定制版,专门为淘宝准备的,阿里、天
- LiquidVM: 它是一个针对硬件的虚拟机,它下面是没有操作系统的(不是 Linux 也不是 windows),下面直接就是硬件,运行效率比较高。
- zing: 它属于 zual 这家公司,非常牛,是一个商业产品,很贵!它的垃圾回收速度非常快(1 毫秒之内),是业界标杆。它的一个垃圾回收的算法后来被
如图所示,常见JVM实现主要有Hotspot 、Jrocket、J9、TaobaoVM、LiquidVM、zing,其中我们最常用的就是Oracle的Hotspot了,如果你的电脑上安装了java,
在命令行输入java -version可以看到如图:
所以,对于JVM的学习主要就是围绕Hotspot进行学习。看到这里,大家应该对JVM应该有了一个初步的了解,接下来我们就开始进入JVM的世界吧。