java为什么能跨平台

青灯夜游
青灯夜游原创
2022-11-25 16:08:5818124浏览

跨平台原因:java虚拟机(JVM)能跨平台;JAVA程序不是直接在电脑(CPU)上运行的,而是在java虚机(JVM)上进行的,每个系统平台都是有自己的JVM虚拟机,所以JAVA语言能跨平台。java是先把java文件编译成二进制字节码的class文件,jvm再解释执行class文件;就是因为java是运行在jvm上的,所以它的代码能不经修改在不同平台的jvm上运行。

本教程操作环境:windows7系统、java8版、DELL G3电脑。

JAVA语言为什么能跨平台?

Java之所以能跨平台,是因为java虚拟机(JVM)能跨平台。

因为Java程序编译之后的代码不是能被硬件系统直接运行的代码,而是一种“中间码”——字节码。然后不同的硬件平台上安装有不同的Java虚拟机(JVM),由JVM来把字节码再“翻译”成所对应的硬件平台能够执行的代码。因此对于Java编程者来说,不需要考虑硬件平台是什么。所以Java可以跨平台。

1.png

因为它有虚拟机(JVM),JAVA程序不是直接在电脑上运行的,是在java虚机(简称JVM)上进行的,每个系统平台都是有自己的虚拟机(JVM),所以JAVA语言能跨平台。

  • Java代码不是直接运行在CPU上,而是运行在Java虚拟机上的(JVM)。

  • java是先把java文件编译成二进制字节码的class文件,jvm就解释执行class文件。

  • 就是因为java是运行在jvm上的,所以它的代码就能不经修改在不同平台的jvm上运行。

扩展知识:

JVM 的专业解释如下

Java 虚拟机(Java Virtual Machine,简称 JVM)是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java 虚拟机包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域。JVM 屏蔽了与具体操作系统平台相关的信息,使 Java 程序只需生成在 Java 虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。JVM 在执行字节码时,实际上最终还是把字节码解释成具体平台上的机器指令执行。

上面的解释看不懂也比较正常,本来不想把专业解释放上来的,想了想还是算了,毕竟还是要让大家对 JVM 有一点详细的认识。如果看不懂专业解释的话,我就用大白话给大家说:

JVM,也就是 Java 虚拟机,就是一个平台,包含于 JRE 的下面。当你需要执行某个 Java 程序时,由 JVM 帮你进行编译和执行。我们编写的 Java 源码,编译后会生成一种 .class 文件,称为字节码文件。Java 虚拟机就是负责将字节码文件翻译成特定平台下的机器码然后运行。

而且JVM 分为很多个系统版本的,你编写好的 Java 程序,无论到哪个平台上,Windows 也好,Linux 也好,macOS 也好,只需要找到 JVM,便可以成功编译和执行。也就是说,只要在不同平台上安装对应的 JVM,就可以运行字节码文件,运行我们编写的 Java 程序。所以这也就是 Java 跨平台性良好,平台无关特性的来历。

而这个过程中,我们编写的 Java 程序没有做任何改变,仅仅是通过 JVM 这一”中间层“,就能在不同平台上运行,真正实现了”一次编译,到处运行“的目的。

JVM 是一个“桥梁”,是一个“中间件”,是实现跨平台的关键,Java 代码首先被编译成字节码文件,再由 JVM 将字节码文件翻译成机器语言,从而达到运行 Java 程序的目的。

注意:编译的结果不是生成机器码,而是生成字节码,字节码不能直接运行,必须通过 JVM 翻译成机器码才能运行。不同平台下编译生成的字节码是一样的,但是由 JVM 翻译成的机器码却不一样。

所以,运行 Java 程序必须有 JVM 的支持,因为编译的结果不是机器码,必须要经过 JVM 的再次翻译才能执行。即使你将 Java 程序打包成可执行文件(例如 .exe),仍然需要JVM的支持。

注意:跨平台的是 Java 程序,不是 JVM。JVM 是用 C/C++ 开发的,是编译后的机器码,不能跨平台,不同平台下需要安装不同版本的 JVM。

关于JVM的执行效率

Java 推出的前几年,人们有不同的看法,解释字节码肯定比全速运行机器码慢很多,牺牲性能换来跨平台的优势是否值得?

然而,JVM 有一个选项,可以将使用最频繁的字节码翻译成机器码并保存,这一过程被称为即时编译。这种方式确实很有效,致使微软的 .NET 平台也使用了虚拟机。

现在的即时编译器已经相当出色,甚至成了传统编译器的竞争对手,某些情况下甚至超过了传统编译器,原因是 JVM 可以监控运行时信息。例如,即时编译器可以监控使用频率高的代码并进行优化,可以消除函数调用(即“内嵌”)。

但是,Java 毕竟有一些 C/C++ 没有的额外的开销,关键应用程序速度较慢。比如 Java 采用了与平台无关的绘图方式,GUI 程序(客户端程序)执行要慢;虚拟机启动也需要时间。

相关视频教程推荐:Java视频教程

以上就是java为什么能跨平台的详细内容,更多请关注php中文网其它相关文章!

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。