我们知道Windows系统上安装的是后缀名为.exe的软件安装包,Mac OX系统上安装的软件包后缀名是.dmg。我们把exe后缀名的安装包放到Max OX系统上是无法安装的,同样把dmg后缀名的安装包放到Windows系统上也无法安装。
为什么不同操作系统上的软件无法安装呢?那是因为操作系统底层实现不一样。exe后缀的软件代码最终编译成Windows系统能识别的机器码。而dmg后缀名的软件代码,最终编译成了Max OX系统能识别的机器码。如下图所示:
image.png
但是我们做JAVA的都知道,JAVA代码既可以运行在Windows操作系统,也可以运行在Linux操作系统,并且是同一份代码。这是怎么做到的呢?
与其他语言不同,JAVA并没有直接编译成操作系统能识别的机器码。而是编译成了一种特地的语言规范,我们称之为字节码。也就是说无论JAVA程序要运行在Windows系统还是Max OX系统,还是Linux系统,它首先都要编译成字节码才能运行。但是即使编译成字节码文件了,不同的操作系统同样不认识。这个时候就需要JAVA虚拟机的帮助了,也就是我们说的JVM。JVM会根据不同的操作系统解析字节码文件内容,将其翻译成各个操作系统能认识的机器码。如下图所示
image.png
- JAVA程序编译成字节码(class文件)
- JVM将字节码翻译成各个操作系统认识的机器码
- 各个操作系统再去执行机器码
小结
到底什么是虚拟机?其实Java虚拟机就是一个字节码翻译器,它将字节码文件(class文件)翻译成各个系统认识的机器码,保证了字节码文件能在不同的操作系统上正确运行。