黑马程序员技术交流社区

标题: 平台无关性 [打印本页]

作者: 又夏    时间: 2018-7-19 13:02
标题: 平台无关性
1. 平台与机械指令
无论哪种编程语言编写的应用程序都需要经过操作系统和处理器来完成程序的运行,因此这里所指的平台是由操作系统核处理器来完成CPU所构成。与平台无关是指软件的运行不因操作系统,处理系统变化而变化而无法运行或者出现运行错误。
每个平台都会形成自己独特的机器指令,所谓平台的机器指令就是可以被该平台直接识别,执行的一种由0.1组成的序列代码。相同的CPU和不同的操作系统所形成的平台的机器指令可能是不同的。比如,某个平台可能用8位序列代码00001111表示加法指令,以10000001表示减法,而另一种平台可能用8位序列代码10101010表达加法指令,以10010011表示减法指令。
2. C/C++程序依赖平台
现在,让我们分析一下为何C/C++语言编写的程序可能因为操作系统的变换,处理升级导致出现错误或无法运行。
C/C++针对当前的C/C++源程序所在的特定平台对其源文件进行编译,链接,生成机器指令,即根据当前的机器指令生成可执行文件,那么,可以在任何与当前平台相同的平台上都能被正确的运行这个可执行文件。但是,不嫩南瓜保证C/C++源程序所产生的可执行文件,因此,如果换了平台,可能需要修改源程序,并针对新的平台重新编译源程序。

3. java虚拟机与字节码
Java语言和其他的语言相比,最大的优势就是它的平台无关性。这是因为java可以在平台之上再提供一个Java运行环境,该java运行环境由Java虚拟机,类库以及一些核心文件组成。Java虚拟机的核心是所谓的字节码指令,即可以被Java虚拟机直接识别,执行的一种由0.1组成的序列代码。字节码并不是机器指令,因为他不和特定的平台相关,不能被任何平台直接识别执行。Java针对不同的平台提供的Java虚拟机的字节码指令都是相同的,比如所有的虚拟机都将11110000识别,执行行为加法操作。
C/C++不同的是,Java语言提供的编译器不针对特定的操作系统和CPU芯片进行编译,而是针对Java虚拟机吧Java源程序编译成字节码的“中间代码”,比如Java源程序的文件中的+被编译的自己码指令11110000.字节码是可以被Java虚拟机识别执行的代码,即Java虚拟机负责解释运行字节码,其运行原理:java虚拟机负责将字节码翻译成虚拟机所在平台的机器码,并让当前平台运行该机器码。
在一个计算机编译得到的字节码的文件可以复制到任何一个安装了一个Java虚拟机的运行环境的计算机直接使用。字节码由Java虚拟机负责解释运行,即Java虚拟机负责将字节码翻译成计算机本地的机器码,并将机器码交给本地的操作系统运行。


平台.png (12.98 KB, 下载次数: 6)

平台.png

平台1.png (17.26 KB, 下载次数: 4)

平台1.png

作者: 小浙姐姐    时间: 2018-7-23 16:04





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2