java的跨平台
Java是如何实现跨平台的:
首先要明白平台是什么:
所谓的平台,就是CPU和操作系统的结合体。市面上CPU的种类很多,不同公司生产的CPU支持相同或不同的指令集。指令集就是CPU用来计算和控制计算机系统的一套指令的集合。指令集又分为精简指令集(RISC)与复杂指令集(CISC)。
其次明白源代码、字节码和机器码的区别:
源代码(.java)经编译器编译执行后生成字节码(.class),然后再由Java虚拟机解释执行字节码,生成不同机器可以识别的机器码。由于Java虚拟机是跨平台的,所以实现了Java代码在不同平台上的运行。
在来看看什么是java虚拟机:
Java虚拟机(Java Virtual Machine,简称 JVM)本质上是一个软件,该软件被放在某个操作系统上,例如Unix、Linux、Windows等,从而为相应操作系统上java程序的运行提供一个独立的标准环境。java虚拟机之所以称为“虚拟”机,就是让我们把这个软件当作一个虚拟的机器。我们编写的java程序运行在这个虚拟的机器上,隔离具体的操作系统和硬件平台,从而实现了java程序的跨平台特性:在一个操作系统上开发的程序可以在任何操作系统上运行。例如,在Windows平台下编写的程序可以直接在Linux上运行。这就是SUN所宣扬的“一次编写,多次运行”。
那如何实现开发语言跨平台呢?实现思想主要是将开发语言编译成一种中间语言,然后利用和平台相关的解释器进行解释执行。下图是Java实现跨平台的机制。
JVM是一个”桥梁“,是一个”中间件“,是实现跨平台的关键,Java代码首先被编译成字节码文件,再由JVM将字节码文件翻译成机器语言,从而达到运行Java程序的目的。
注意:编译的结果不是生成机器码,而是生成字节码,字节码不能直接运行,必须通过JVM翻译成机器码才能运行。不同平台下编译生成的字节码是一样的,但是由JVM翻译成的机器码却不一样。
所以,运行Java程序必须有JVM的支持,因为编译的结果不是机器码,必须要经过JVM的再次翻译才能执行。即使你将Java程序打包成可执行文件(例如 .exe),仍然需要JVM的支持。
注意:跨平台的是Java程序,不是JVM。JVM是用C/C++开发的,是编译后的机器码,不能跨平台,不同平台下需要安装不同版本的JVM。
浙公网安备 33010602011771号