Java语言的跨平台特性
1. 概念
首先我们得知道这里的”平台“指的是什么。所谓的平台,其实就是指计算机操作系统,比如windows、linux、mac系统。而跨平台则是软件开发中的一个重要概念,即软件不依赖某个具体的操作系统,也不依赖某个具体的硬件环境。在一个操作系统下开发的应用,放到另一个操作系统下依然可以运行。通俗地说,我们开发出来一个软件,可以同时在windows、linux、mac等系统中运行,这就是”跨平台“!
2. 特性
Java语言具有”跨平台“的特性,是相对于其他编程语言来说的。这是因为Java语言编写出的应用程序,只需要编写一次代码,就可以在不同的系统上运行。而其他的一些高级语言,比如C语言写出的代码,如果想在不同的平台上运行,需要编译成针对不同系统平台的目标代码。比如在Windows系统中编译的C语言程序,在Linux下是不能运行的,需要重新编译成Linux下的目标程序。反之,在Linux下编译的C语言程序,在Windows下也不能运行。
而Java在不同平台上运行时,就不需要针对不同的平台多次重新编译,这样就实现了所谓的“Write Once,Run Anywhere”。
现在你可能会很好奇,为什么C、C++不能实现跨平台,而Java却可以实现跨平台?要想搞清楚这个问题,我们得了解一下什么是JVM虚拟机。
3.JVM虚拟机
JVM:Java Virtual Machine。这是一种抽象的计算机,是在真实的计算机中仿真模拟出各种计算机的功能。简单地说,我们可以把JVM理解成是一个”软件“,该软件相当于一个小型的”计算机系统“。虚拟机有自己完善的硬体架构,如处理器、堆栈、寄存器等,还有各种指令系统。Java虚拟机屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种操作系统平台上不加修改地运行。
JVM最核心的一个模块叫Java解释器,相当于是计算机的“CPU”,可以将.class字节码解释成适合不同操作系统的可执行代码。Java解释器实际上就是特定系统平台下的一个应用程序,只要实现了这个解释器程序,Java字节码就能通过该解释器在该平台下运行,这是Java之所以可以实现跨平台的根本原因所在!
但目前并不是所有的操作系统都有自己对应的Java解释器,所以Java程序并不能在所有的操作系统下运行。它只能在已实现了Java解释器的平台中运行,比如windows、linux、mac等主流平台。
目前商用的Java虚拟机有很多种,其中比较主流的有如下几个:
1. 适用于JavaSE/JavaEE平台的主流JVM(按流行程度递减):HotSpot VM、J9 VM、Zing VM。
2. 适用于JavaME平台的主流JVM:CLDC-HI、J9 VM;
3. 适用于Android系统的主流JVM:Dalvik VM、ART VM;
4. 其他
对于以上这些虚拟机种类,我们作为初学者简单了解即可,尤其是对HotSpot VM有印象就行,这是我们进行Java开发默认使用的标准JVM。
有了以上这些知识的铺垫,我们就可以尝试着理解Java之所以可以实现跨平台的原理了!
3.1 C语言的编译过程
在windows系统下,我们编写的C语言源码文件后缀是.c,在windows平台下进行编译会生成后缀名为.exe的可执行文件,经常安装软件的同学应该对这个.exe后缀不陌生。生成.exe文件后,就可以在windows系统中运行了。
但是如果我们换一个linux操作系统,即使是同样的C语言代码,在没有进行重新编译的前提下,是无法直接运行的。windows里的.exe可执行文件,在linux中是不能执行的!所以我们需要将之前的C语言程序,针对linux平台重新编译,生成适合于linux平台的可执行文件才行。
以上就是C语言针对不同平台的编译过程,换一个平台就得编译一次,所以C语言是无法实现跨平台的!但Java却可以实现跨平台,它是怎么做到的呢?我们往下看!
3.2 Java语言的编译过程
我们知道Java编程要经历编写、编译、执行这三个核心步骤。而在执行之前,我们会把.java源码文件编译成.class字节码文件,这里的.java文件、.class文件和具体的操作系统无关,无论是windows/linux/mac等任何系统,这些文件都是一样的。那Java到底是依靠什么,才能实现不同操作系统上跨平台的呢?从上图可以很明显的看出,关键在于JVM Java虚拟机!正是因为存在JVM虚拟机,所以Java才能实现跨平台!
那JVM又是如何实现跨平台的呢?
3.3 JVM跨平台实现机制
JVM之所以可以实现跨平台,原理其实很简单!其实JVM本身并没有实现跨平台,也就是说不同的操作系统中,需要不同的JVM虚拟机。
所以,如果我们想在Windows系统下开发Java项目,就需要去Oracle官网下载安装一个Windows版的JVM;如果我们想在Linux系统下开发Java项目,就需要去Oracle官网下载安装一个Linux版的JVM;其他系统以此类推。也就是说,.java文件、.class文件,无论在哪个系统上都是一样的,但JVM是不一样的,基于此实现了跨平台!
Java源程序编译后生成的.class字节码,.class字节码文件运行在JVM虚拟机上,并不直接运行在具体的Windows系统上,而JVM虚拟机又分为Windows版、Linux版、Mac版。JVM充当了中间人的角色,把.class文件和操作系统分割并联系了起来,.class文件不和操作系统直接交互,而是由JVM和操作系统进行交互。
我们可以在Windows、Linux、Mac等任意系统中编写Java程序,并生成.class字节码文件,但要想实现跨平台,则需要安装Windows、Linux、或Mac等系统自己版本的JVM虚拟机。然后把字节码文件放到不同系统下的JVM虚拟机中运行,这样就实现了所谓的跨平台。这样我们程序员就只需要去编写和编译Java代码,至于跨平台的事情,是JVM要做的,我们不关心!
所以说,Java跨平台的根本原理,就是通过JVM虚拟机来实现的!但你要知道,Java语言是跨平台的,JVM却不是跨平台的,不同的操作系统有不同版本的JVM!
相关推荐HOT
更多>>xml解析器
SAX解析器:基于事件驱动的解析器,逐行读取XML文件并触发相应的事件,适用于处理大型XML文件,但需要手动编写事件处理器来处理XML文件中的数据...详情>>
2023-03-21 16:03:51java全局变量
如果全局变量是一个对象,则可以更改该对象的状态,即使变量本身是final类型。当一个方法被调用时,会为该方法在栈上分配一块内存空间,用于存...详情>>
2023-03-17 10:01:40带你手把手解决Java常见Bug
刚开始学习Java语言的小伙伴, 很可能被各种各样的程序bug搞得焦头烂额, 甚至被劝退。别怕,小编将手把手带你了解Java中的异常体系, 如何识别Bug...详情>>
2023-03-13 16:05:00JavaScript 内的 this 指向
在 javascript 语言中, 有一个奇奇怪怪的 "关键字" 叫做 this详情>>
2023-03-07 15:21:00