Java跨平台性

来源:互联网 发布:知乎 中国出生率 编辑:程序博客网 时间:2024/06/05 18:22

Java跨平台性

PS : 本文乃学习整理参考而来
前言:Java优秀的跨平台性,和其语言特性紧密相连;


首先得说程序设计语言的分类,分为:编译型语言解释型语言

程序设计语言分类描述:程序执行时的基本表示是①实际计算机上的机器语言还是②解释器解释才能得到的机器语言②虚拟机的机器语言),可以由此将程序设计语言分为①编编译型语言和②解释型语言。

          由于计算机只认识机器语言(二进制),所以高级语言(如C、C++、Java、Python、VBScript、JS等)都不能被计算机直接执行,必须经过有效翻译。如:编译解释都是将高语言翻译成机器语言的方式,而区别是翻译的时间不同,由编译型语言写的程序在执行之前,先经过编译过程,把程序编译成机器语言文件,当运行时直接执行,因此只需进行一次翻译。而解释型语言写的程序不需要编译,直到程序运行时才进行动态翻译后执行


以下对几个名词进行解释

编译型语言:源程序经过编译汇编链接得到输出目标代码,然后由计算机执行目标代码(机器指令)。代表语言:C 、C++。

解释型语言:由可以理解源代码的解释程序(解释器)执行,解释器的任务是将源代码(中间代码)解释成可执行的机器指令。 代码执行时逐一解释成可执行的机器指令。 代表语言:Ruby、VBScript、JS,以及大多动态语言都是解释型的。

编译器:把源程序编译成机器语言,保存成二进制文件,这样运行时计算机可以直接以机器语言来运行程序,执行效率高

解释器:只在程序执行时,才一条条解释成机器语言给计算机执行,理论速度相对慢


总结:

          不同操作系统通过编译生成的字节码文件的格式不同,所以大多数编译型语言(如C语言)在Windows上编译后的文件,在Linux上出于该原因,无法执行,跨平台性受到限制。而解释型语言通过解释器(软件解释器)将中间代码动态解释成可以执行的机器指令。这就是编译型语言不如解释型语言跨平台性好的原因所在。

          而Java较为特殊,Java需要编译,但是没有直接编译成机器语言而是编译成为.class的字节码文件。然后通过Jvm解释器进行解释执行。在Windows系统上运行,则通Windows上的Jvm进行解释,而在Linux系统上,则通过Linux上的Jvm解释执行。所以Java跨平台,需要保证有相匹配的Jvm如果没有,则不能进行跨平台

这里写图片描述

          网上对于Java是属于编译型还是解释型语言热议比较多,也有认为Java是一种“半编译,半解释”的语言,本人理解更倾向于后者


PS:Go语言初识:一种编译型语言,但是不仅有C、C++般的执行效率,还有优秀的跨平台性,得益于Go语言编译器可以编译生成不同操作系统的机器码。

原创粉丝点击