JavaSe·基础篇(三) Java语言跨平台原理图解


跨平台

Java是一种跨平台语言,跨平台就是指能够实现“一次编译,到处运行”

现在市面上常见的平台有 Windows、Linux、Mac,我们在编写好Java源文件后通过编译成字节码文件,而这个字节码文件就能够在各个平台上被解释运行,而这得力于一个叫JVM虚拟机来实现的。

JVM虚拟机

JVM虚拟机(Java Virtual Machine),是一个软件,不同平台有不同版本。我们通过编译Java源代码生产一种.class的文件,称为字节码文件。

Java虚拟机就是负责将字节码文件翻译成特定平台下的机器码然后运行,也就是说只要在不同平台上安装上对应的JVM,就可以运行字节码文件,运行我们编写的Java程序。

图文解C语言跨平台

了解跨平台原理之前,我们先了解下C语言是如何跨不同平台执行:

java语言跨平台性 java语言跨平台的原理_Java


火星人只会说火星文,地球人理解不了,怎么办啊?于是学习中文(中文编译器)来携带中文(通过中文编译器编译好的中文)去中国,这样中国人就能听懂火星人讲什么了。但这样问题来了,中文只有中国人能听懂,轮到拜访美国人根本不明白,意味着你又得掌握美国语言,才能和美国人进行交流,也就是语言不能跨平台。

C语言是使用特定编译器编译的程序只能在对应的平台运行

图文解Java跨平台原理

Java是利用JVM实现跨平台的,让我们画一张图来解释下:

java语言跨平台性 java语言跨平台的原理_跨平台_02


我是中国人,我大脑里组织语言(编写.java源文件),我通过我的语言器官说出中文(将.java源文件编译成.class字节码文件),可外国人听不懂我在说什么,所以我得找个翻译(JVM虚拟机),而不同国家拥有者不同的语言(不同平台的CPU指令不一样),我们去到哪个国家,就得找哪个国家的翻译,例如去到美国,那么我们肯定是找中美翻译(WIndows版本的虚拟机),再把我的话通过翻译转成美国人能听懂的语言(WIndows下的虚拟机通过将.class文件解释成Windows能执行的机器码),这样就能和美国人交流。同理我去到日本就去找日本的翻译(Linux版本的虚拟机),去韩国就去找韩国的翻译(Mac版本的虚拟机

两种方式的差异

  1. C语言是编译执行的,编译器与平台相关,编译生成的可执行文件与平台相关;
  2. Java是解释执行的,编写.java的编译器与平台无关,编译生成的.class也与平台无关(一次编译,到处运行),字节码再由解释器解释执行,解释器是与平台相关的,也就是不同的平台需要不同的解释器.

注意:Java是跨平台的,但是JVM不是跨平台的。