JVM——跨平台原理

发布时间 2023-05-31 17:01:19作者: 虞美人体重90

Java语言具有跨平台的特性。这里的平台是指计算机操作系统,如windows、linux等,这里的跨平台是指java程序只需要编译一次,就可以在不同的操作系统上运行,这就是所谓的一次编译,到处运行。

Java语言跨平台的核心是因为JVM的存在。

JVM是Java虚拟机的缩写。这是一种抽象的计算机,是在真实的计算机中仿真模拟出各种计算机的功能。简单地说,我们可以把JVM理解成是一个”软件“,该软件相当于一个小型的”计算机系统“。虚拟机有自己完善的硬体架构,如处理器、堆栈、寄存器等,还有各种指令系统。JVM整体结构如下:

 

 JVM在运行Java应用程序时,负责将Java源代码转换为与特定操作系统相关的二进制代码(字节码文件)、然后在虚拟机中执行。

字节码文件是一种中间代码,类似于汇编语言。它不是特定于某个平台的二进制代码,它被JVM解释执行时,JVM会根据当前的操作系统将字节码转换为当前操作系统可识别的机器码。

(备注:机器码是CPU能够理解和执行的二进制编码(计算机只能理解0和1),也就是一条条的计算机指令。机器码和字节码都是二进制文件,只不过字节码是一种中间代码,需要Java解释执行成机器码才可以由CPU执行。)

上面说到JVM会根据当前的操作系统将字节码转换为当前操作系统可识别的机器码,它是怎么做到的呢?这是因为不同的操作系统中,需要不同的JVM虚拟机。

也就是说JVM本身是没有实现跨平台的,.java文件和.class文件无论在哪个操作系统上都一样,不过是因为不同的操作系统中有相对应的JVM,这使得能将其转换为相对应的机器码在CPU上执行,如此实现了跨平台。

Java源程序编译后生成的.class字节码,.class字节码文件运行在JVM虚拟机上,并不直接运行在具体的Windows系统上,而JVM虚拟机又分为Windows版、Linux版、Mac版。JVM充当了中间人的角色,把.class文件和操作系统分割并联系了起来,.class文件不和操作系统直接交互,而是由JVM和操作系统进行交互。