aizixun8 发表于 2024-11-10 01:45:52

Java 跨平台特性详解:从开发步骤到 JVM 虚拟机

全文约【4000】字,没有废话,只有纯粹实用的信息,让你学技术、懂原理!还附有丰富的案例和图片,让您更好地理解和应用文章中的技术概念,给您带来足够的启迪思考……

在上一篇文章中,一哥给大家介绍了Java的历史、特性、版本等纯理论知识。其中,我向大家提到了一个重要的“跨平台”特性。对于很多初学者来说,他们还不明白“跨平台”意味着什么。所以在开始实际操作Java代码之前,一哥会用另一篇文章给大家讲解一下什么是“跨平台”以及Java是如何实现“跨平台”的。要真正理解“跨平台”的含义,必须了解Java代码的开发步骤,以及JVM虚拟机等内容。

1.高级编程语言的分类

易哥在上一篇文章中告诉大家,高级编程语言可以分为两类,如下:

1、编译类型:C、C++等;

2. 口译类型:基础等

1. 编译语言

编译型语言在程序执行之前有一个特殊的编译过程。编译器会将程序编译成不同CPU类型的可执行文件,然后机器运行该可执行文件。运行时不需要重新编译,直接使用编译结果即可。编译语言的工作原理就像“翻译书籍”。

在同一平台(操作系统)上,编译型语言可以编译一次,运行无限次。只要在第一次执行前编译生成相应的可执行文件,以后每次运行时都可以直接运行这个可执行文件,因此其运行效率比解释型语言要高。

但对于不同的平台(操作系统),要生成的可执行文件是不同的,因为不同平台支持的函数、类型、变量等可能不同。因此,用编译语言编写的代码如果想要在不同类型的操作系统上运行,就必须经过多次不同的编译。因此,很难在不同操作系统之间随意切换,可移植性较差。

2. 解释性语言

解释型语言同时进行转换和执行,不会从源代码生成可执行文件。而是将源代码翻译成中间代码,然后中间代码由解释器解释并运行,每次执行时都会进行翻译。口译语言的工作方式类似于“同声传译”。

用解释性语言编写的代码每次运行时都需要重新转换源代码。会有一个解释器根据操作系统将源代码转换为不同的机器代码。因此,相同的源代码可以在不同的平台上运行,即“编写一次,到处运行”。然而,解释型语言每次执行时都必须重新转换源代码,这本质上比编译型语言效率低。

总之,编译型语言和解释型语言各有优缺点!

3.Java语言特点

我们的Java语言,准确的说,既不是编译型语言,也不是解释型语言,而是综合了以上两种语言类型的优点。 Java会先编译源代码,然后解释执行编译后的字节码文件!

接下来易哥重点讲一下Java语言是如何处理程序的。

2.Java程序开发步骤

为了清楚地解释Java程序的开发步骤,我们先看下图:

从上图可以看出,Java的代码处理流程可以分为3个核心步骤:

1、编写源程序:这一步是使用各种开发工具,如、Idea等编写Java代码,生成后缀为.java的源代码文件。请注意,我们可以在任何操作系统中编写 Java 代码。

2、编译源程序:这一步,Java编译器对.java文件进行编译,生成后缀为.class的字节码文件。请注意,这里生成的.class字节码文件与操作系统无关。

3、运行:这一步是使用JVM虚拟机将.class字节码文件加载到虚拟机中并运行。请注意,如果我们想在不同的操作系统中运行生成的.class字节码文件,我们需要安装相应系统的JVM虚拟机。

作为初学者,我们需要记住上面Java处理代码的三个步骤,即“编写、编译、运行”。另外,我们还需要知道编写和编译阶段生成的文件后缀是什么。

易哥简单的给大家展示了上面三个阶段的基本内容,但实际上这三个阶段在JVM中处理起来是非常复杂的。更多详情请参考下图:

https://i9.taou.com/maimai/p/22029/6146_49_5evelzuxbiyRgi

当然,对于初学者来说,暂时不用掌握这么详细。我们将在以后的章节中更详细地解释这些内容。了解了Java程序的处理步骤之后,我们来了解一下什么是“跨平台”。

3. 跨平台

1. 概念

首先我们要知道这里的“平台”指的是什么。所谓平台实际上是指计算机操作系统,如linux、mac系统等。跨平台是软件开发中的一个重要概念,即软件不依赖于特定的操作系统或特定的硬件环境。在一种操作系统下开发的应用程序仍然可以在另一种操作系统下运行。通俗地说,我们开发了一款可以同时运行在Linux、Mac等系统上的软件。这就是“跨平台”!

2. 特点

Java语言与其他编程语言相比,具有“跨平台”的特点。这是因为用Java语言编写的应用程序只需要编写一次代码,就可以在不同的系统上运行。对于其他高级语言,比如用C语言编写的代码,如果想要在不同的平台上运行,就需要将其编译成不同系统平台的目标代码。例如,系统中编译的C语言程序无法在Linux下运行,需要重新编译成Linux下的目标程序。相反,在Linux下编译的C语言程序无法在Linux下运行。

Java在不同平台上运行时,不需要针对不同平台多次重新编译,从而实现了所谓“Write Once, Run”。

现在你可能会好奇,为什么C、C++不能跨平台,而Java却可以跨平台呢?要理解这个问题,我们需要先了解什么是JVM虚拟机。

4.JVM虚拟机

1. 概念

JVM:Java。这是一个抽象的计算机,在真实的计算机中模拟了各种计算机的功能。简单来说,我们可以将JVM理解为一个“软件”,相当于一个小型的“计算机系统”。虚拟机有自己完整的硬件架构,如处理器、堆栈、寄存器等,以及各种指令系统。 Java虚拟机屏蔽了与具体操作系统平台相关的信息,使得Java程序只需要生成在Java虚拟机上运行的目标代码(字节码),就可以在多种操作系统平台上运行修改。

JVM的核心模块之一称为Java解释器,相当于计算机的“CPU”。它可以将.cl​​ass字节码解释为适合不同操作系统的可执行代码。 Java解释器实际上是特定系统平台下的应用程序。只要实现了这个解释器程序,Java字节码就可以通过解释器在那个平台上运行。这就是Java能够实现跨平台的根本原因,原因如下!

但目前并不是所有操作系统都有自己对应的Java解释器,因此Java程序并不能在所有操作系统下运行。它只能运行在已经实现了Java解释器的平台上,比如linux、mac等主流平台。

2. 类型

目前商用的Java虚拟机有多种类型,其中比较主流的有以下几种:

1、主流JVM适用/平台(按受欢迎程度由高到低排列):VM、J9 VM、Zing VM。

2、适合平台的主流JVM:CLDC-HI、J9 VM;

3、系统适用的主流JVM:VM、ART VM;

4.其他。

对于以上几类虚拟机,作为初学者,我们可以简单的了解一下,尤其是对VM有印象的情况下。这是我们默认用于 Java 开发的标准 JVM。

3. 跨平台实现原理(要点)

有了上面的知识,我们就可以尝试去理解Java为什么能够实现跨平台的原理了!

3.1 C语言的编译过程

为了让大家了解Java的跨平台原理,我们首先对比一下C语言的编译过程,如下图所示:

https://pic1.zhimg.com/v2-f9c9d2086512457db9f75f6e7c143f50_r.jpg

从上图可以看出,在系统下,我们编写的C语言源代码文件的后缀是.c。在平台下编译会生成后缀为.exe的可执行文件。经常安装软件的同学应该不会熟悉这个.exe后缀。陌生感。生成.exe文件后即可在系统中运行。

但如果换成Linux操作系统,即使是同样的C语言代码,不重新编译也无法直接运行。 Linux中的.exe可执行文件无法执行!因此,我们需要针对Linux平台重新编译之前的C语言程序,生成适合Linux平台的可执行文件。

以上是C语言针对不同平台的编译过程。如果换一个平台,就得编译一次,所以C语言无法实现跨平台!但Java可以跨平台。它是如何做到的?我们往下看吧!

3.2 Java语言的编译过程

Java之所以能够跨平台,最根本的原因就是因为JVM虚拟机的存在!我们先看下图:

根据上图,结合之前一哥给大家讲的Java编程步骤,我们知道Java编程需要三个核心步骤:编写、编译、执行。在执行之前,我们将.java源代码文件编译为.class字节码文件。这里的.java文件和.class文件与具体操作系统无关。无论/linux/mac等任何系统,这些文件都是一样的。那么Java究竟是依靠什么来实现不同操作系统上的跨平台运行呢?从上图可以明显看出,关键在于JVM Java虚拟机!正是因为JVM虚拟机的存在,Java才可以跨平台!

那么JVM是如何实现跨平台的呢?

3.3 JVM跨平台实现机制

JVM之所以能够实现跨平台,其实很简单!事实上,JVM本身并不是跨平台的,这意味着不同的操作系统需要不同的JVM虚拟机,如下图所示:

因此,如果我们想要在该系统下开发Java项目,我们需要去官网下载并安装一个版本的JVM;如果我们想在Linux系统下开发Java项目,我们需要去官网下载并安装Linux版本的JVM;其他系统也使用这个类比。换句话说,.java文件和.class文件无论在哪个系统上都是一样的,只是JVM不同。以此为基础,实现了跨平台!如下图:

从上图可以看出,Java源程序编译后生成的.class字节码和.class字节码文件运行在JVM虚拟机上,并不直接运行在具体系统上。 JVM虚拟机分为版本,Linux版本,Mac版本。 JVM充当中间人,划分和连接.class文件和操作系统。 .class 文件不直接与操作系统交互,而是 JVM 与操作系统交互。

我们可以在Linux或Mac等任何系统中编写Java程序并生成.class字节码文件。但是,如果我们想要实现跨平台,就需要安装Linux、Mac或者其他系统自己版本的JVM虚拟机。然后将字节码文件放入不同系统下的JVM虚拟机中运行,从而实现所谓的跨平台。这样,我们程序员只需要编写和编译Java代码即可。至于跨平台的事情,是JVM做的,我们不管!

所以,Java跨平台的根本原理就是通过JVM虚拟机来实现的!但你要知道Java语言是跨平台的,但是JVM却不是跨平台的。不同的操作系统有不同版本的JVM!

5. 结论

至此,易哥已经重点给大家讲解了跨平台实现的原理。现在你知道为什么Java可以实现跨平台了吗?如果还有不明白的地方,可以在评论区留下你的问题。

6.今天的作业

问题1

请简单描述一下编译型语言和解释型语言的区别,并请在评论区给出你的答案。

问题2

简述一下开发Java程序的步骤?每个阶段生成的文件后缀是什么?在评论区给出你的答案吧。

问题3

请简单描述一下JVM虚拟机跨平台实现的基本原理,并在评论区给出你的答案。
页: [1]
查看完整版本: Java 跨平台特性详解:从开发步骤到 JVM 虚拟机