Java是如何实现平台无关性(跨平台)的? Dear 丶 2022-04-23 15:44 190阅读 0赞 相信对于很多Java开发来说,在刚刚接触Java语言的时候,就听说过Java是一门跨平台的语言,Java是平台无关性的,这也是Java语言可以迅速崛起并风光无限的一个重要原因。那么,到底什么是平台无关性?Java又是如何实现平台无关性的呢?本文就来简单介绍一下。 # *1*什么是平台无关性 # 平台无关性就是一种语言在计算机上的运行不受平台的约束,一次编译,到处执行(Write Once ,Run Anywhere)。 也就是说,用Java创建的可执行二进制程序,能够不加改变的运行于多个平台。 平台无关性好处 作为一门平台无关性语言,无论是在自身发展,还是对开发者的友好度上都是很突出的。 因为其平台无关性,所以Java程序可以运行在各种各样的设备上,尤其是一些嵌入式设备,如打印机、扫描仪、传真机等。随着5G时代的来临,也会有更多的终端接入网络,相信平台无关性的Java也能做出一些贡献。 对于Java开发者来说,Java减少了开发和部署到多个平台的成本和时间。真正的做到一次编译,到处运行。 # *2*平台无关性的实现 # 对于Java的平台无关性的支持,就像对安全性和网络移动性的支持一样,是分布在整个Java体系结构中的。其中扮演者重要的角色的有Java语言规范、Class文件、Java虚拟机(JVM)等。 编译原理基础 讲到Java语言规范、Class文件、Java虚拟机就不得不提Java到底是是如何运行起来的。 在计算机世界中,计算机只认识0和1,所以,真正被计算机执行的其实是由0和1组成的二进制文件。 但是,我们日常开发使用的C、C++、Java、Python等都属于高级语言,而非二进制语言。所以,想要让计算机认识我们写出来的Java代码,那就需要把他"翻译"成由0和1组成的二进制文件。这个过程就叫做编译。负责这一过程的处理的工具叫做编译器。 在Java平台中,想要把Java文件,编译成二进制文件,需要经过两步编译,前端编译和后端编译: ![webp][] 前端编译主要指与源语言有关但与目标机无关的部分。Java中,我们所熟知的javac的编译就是前端编译。除了这种以外,我们使用的很多IDE,如eclipse,idea等,都内置了前端编译器。主要功能就是把.java代码转换成.class代码。 这里提到的.class代码,其实就是Class文件。 后端编译主要是将中间代码再翻译成机器语言。Java中,这一步骤就是Java虚拟机来执行的。 ![webp 1][] 所以,我们说的,Java的平台无关性实现主要作用于以上阶段。如下图所示: ![webp 2][] 我们从后往前介绍一下这三位主演:Java虚拟机、Class文件、Java语言规范 Java虚拟机 所谓平台无关性,就是说要能够做到可以在多个平台上都能无缝对接。但是,对于不同的平台,硬件和操作系统肯定都是不一样的。 对于不同的硬件和操作系统,最主要的区别就是指令不同。比如同样执行a+b,A操作系统对应的二进制指令可能是10001000,而B操作系统对应的指令可能是11101110。那么,想要做到跨平台,最重要的就是可以根据对应的硬件和操作系统生成对应的二进制指令。 而这一工作,主要由我们的Java虚拟机完成。虽然Java语言是平台无关的,但是JVM确实平台有关的,不同的操作系统上面要安装对应的JVM。 ![webp 3][] 上图是Oracle官网下载JDK的指引,不同的操作系统需要下载对应的Java虚拟机。 有了Java虚拟机,想要执行a+b操作,A操作系统上面的虚拟机就会把指令翻译成10001000,B操作系统上面的虚拟机就会把指令翻译成11101110。 ![webp 4][] ps:图中的Class文件中内容为mock内容 所以,Java之所以可以做到跨平台,是因为Java虚拟机充当了桥梁。他扮演了运行时Java程序与其下的硬件和操作系统之间的缓冲角色。 字节码 各种不同的平台的虚拟机都使用统一的程序存储格式——字节码(ByteCode)是构成平台无关性的另一个基石。Java虚拟机只与由自己码组成的Class文件进行交互。 我们说Java语言可以Write Once ,Run Anywhere。这里的Write其实指的就是生成Class文件的过程。 因为Java Class文件可以在任何平台创建,也可以被任何平台的Java虚拟机装载并执行,所以才有了Java的平台无关性。 Java语言规范 已经有了统一的Class文件,以及可以在不同平台上将Class文件翻译成对应的二进制文件的Java虚拟机,Java就可以彻底实现跨平台了吗? 其实并不是的,Java语言在跨平台方面也是做了一些努力的,这些努力被定义在Java语言规范中。 比如,Java中基本数据类型的值域和行为都是由其自己定义的。而C/C++中,基本数据类型是由它的占位宽度决定的,占位宽度则是由所在平台决定的。所以,在不同的平台中,对于同一个C++程序的编译结果会出现不同的行为。 举一个简单的例子,对于int类型,在Java中,int占4个字节,这是固定的。 但是在C++中却不是固定的了。在16位计算机上,int类型的长度可能为两字节;在32位计算机上,可能为4字节;当64位计算机流行起来后,int类型的长度可能会达到8字节。(这里说的都是可能哦!) ![webp 5][] 通过保证基本数据类型在所有平台的一致性,Java语言为平台无关性提供强了有力的支持。 # *3*小结 # 对于Java的平台无关性的支持是分布在整个Java体系结构中的。其中扮演者重要的角色的有Java语言规范、Class文件、Java虚拟机等。 Java语言规范 通过规定Java语言中基本数据类型的取值范围和行为 Class文件 所有Java文件要编译成统一的Class文件 Java虚拟机 通过Java虚拟机将Class文件转成对应平台的二进制文件等 Java的平台无关性是建立在Java虚拟机的平台有关性基础之上的,是因为Java虚拟机屏蔽了底层操作系统和硬件的差异。 # *4*语言无关性 # 其实,Java的无关性不仅仅体现在平台无关性上面,向外扩展一下,Java平还具有语言无关性,更准确的说是Java虚拟机具有语言无关性。 前面我们提到过。JVM其实并不是和Java文件进行交互的,而是和Class文件,也就是说,其实JVM运行的时候,并不依赖于Java语言。 时至今日,商业机构和开源机构已经在Java语言之外发展出一大批可以在JVM上运行的语言了,如Groovy、Scala、Jython等。之所以可以支持,就是因为这些语言也可以被编译成字节码(Class文锦啊)。而虚拟机并不关心字节码是有哪种语言编译而来的。 [webp]: /images/20220225/43297fc5aa1f49fea5f6a59c448bce0e.png [webp 1]: /images/20220225/3eb24284bf824e679febeadd5e46a7ea.png [webp 2]: /images/20220225/9d5d7053fb6b4c3fbea4e8b9309869b3.png [webp 3]: /images/20220225/67534463c8394c0789c4bb9390dbe00a.png [webp 4]: /images/20220225/b02c0dbdf8614b79a60a3b46bb286657.png [webp 5]: /images/20220225/eb047af7b16b4def903dd9fb37cc0f00.png
相关 跨平台Java开发,如何处理不同操作系统下的兼容性问题 在跨平台的Java开发中,确保兼容性的主要方法有以下几个方面: 1. **使用Java标准库(JDK)**:Java设计时就考虑了跨平台。只要你的电脑安装了正确的JDK,就可 我会带着你远行/ 2024年09月11日 19:51/ 0 赞/ 19 阅读
相关 学习Java——平台无关性 目录 引言 什么是平台无关性 平台无关性的好处 平台无关性的实现 编译原理基础 Java虚拟机 字节码 Java语言规范 小结 语言无关性 ---- - 日理万妓/ 2024年03月25日 19:54/ 0 赞/ 17 阅读
相关 java是如何实现跨平台的及jdk,jre,jvm的区别 1.java是如何实现跨平台的? Java实现跨平台的原理 :一次编译,处处运行。 实现原理 : Java 源代码经过编译,生成字节码文件,交由 Java 虚拟机(JV 妖狐艹你老母/ 2024年03月16日 07:25/ 0 赞/ 39 阅读
相关 "Java之所以能跨平台,本质原因在于jvm不是跨平台的"如何理解? 误区:JVM都不是跨平台的,JAVA依赖于JVM,那JAVA应该就不跨平台了啊 解释:先理解跨平台含义:不依赖于操作系统,也不依赖硬件环境。 不 比眉伴天荒/ 2022年06月13日 14:40/ 0 赞/ 145 阅读
相关 浅谈Java平台无关性 为什么Java要支持平台无关性 众所周知,Java是平台无关的语言,那么Java为什么要支持平台无关性,总结一下,有如下几点 支持多变的网络环境。如今是一个互联网的时代, ╰半橙微兮°/ 2022年06月01日 12:28/ 0 赞/ 156 阅读
相关 Java是如何实现跨平台的 一.Java如何实现跨平台 1.我们编写的Java源码,编译后会生成一种 .class 文件,称为字节码文件 2.Java虚拟机JVM就是负责将字节码文件翻译成特定平台 小咪咪/ 2022年05月26日 04:11/ 0 赞/ 232 阅读
相关 Java是如何实现平台无关性(跨平台)的? 相信对于很多Java开发来说,在刚刚接触Java语言的时候,就听说过Java是一门跨平台的语言,Java是平台无关性的,这也是Java语言可以迅速崛起并风光无限的一个重要原因。 Dear 丶/ 2022年04月23日 15:44/ 0 赞/ 191 阅读
相关 Java基础篇:什么是平台无关性 什么是平台无关性: 平台无关性就是一种语言在计算机上的运行不受平台的约束,一次编译,到处执行 。 平台无关有两种: 源代码级和目标代码级。而C和C++具有一定程度的源代 ╰+攻爆jí腚メ/ 2022年03月07日 06:20/ 0 赞/ 565 阅读
相关 Java是如何实现平台无关性(跨平台)的? 相信对于很多Java开发来说,在刚刚接触Java语言的时候,就听说过Java是一门跨平台的语言,Java是平台无关性的,这也是Java语言可以迅速崛起并风光无限的一个重要原因。 水深无声/ 2022年01月29日 08:17/ 0 赞/ 305 阅读
还没有评论,来说两句吧...