java平台无关性(jvm,jdk,jre介绍),python也是跨平台的

目录

 

1,什么是平台无关性?

2,java的平台无关性?

3,jvm,jdk,jre介绍

4,python与java跨平台比较


1,什么是平台无关性?

平台无关性就是一种语言在计算机上的运行不受平台的约束,一次编译,到处执行 。

因为其平台无关性,所以Java程序可以运行在各种各样的设备上,尤其是一些嵌入式设备,如打印机、扫描仪、传真机等。随着5G时代的来临,也会有更多的终端接入网络,相信平台无关性的Java也能做出一些贡献。

ps:编译:是把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时计算机可以直接以机器语言来运行此程序,速度很快;解释:只在执行程序时,才一条一条的解释成机器语言给计算机来执行,所以运行速度是不如编译后的程序运行的快的.。编译是将源程序翻译成可执行的目标代码,翻译与执行是分开的;而解释是对源程序的翻译与执行一次性完成,不生成可存储的目标代码。

2,java的平台无关性?

在Java平台中,想要把Java文件,编译成二进制文件,需要经过两步编译,前端编译和后端编译:

java平台无关性(jvm,jdk,jre介绍),python也是跨平台的

前端编译主要指与源语言有关但与目标机无关的部分。Java中,我们所熟知的javac的编译就是前端编译。除了这种以外,我们使用的很多IDE,如eclipse,idea等,都内置了前端编译器。主要功能就是把.java代码转换成.class代码。

这里提到的.class代码,其实就是Class文件。

后端编译主要是将中间代码再翻译成机器语言。Java中,这一步骤就是Java虚拟机来执行的。

java平台无关性(jvm,jdk,jre介绍),python也是跨平台的

所以,我们说的,Java的平台无关性实现主要作用于以上阶段。如下图所示:

java平台无关性(jvm,jdk,jre介绍),python也是跨平台的

我们从后往前介绍一下这三位主演:Java虚拟机、Class文件、Java语言规范

java虚拟机

所谓平台无关性,就是说要能够做到可以在多个平台上都能无缝对接。但是,对于不通的平台,硬件和操作系统肯定都是不一样的。

对于不同的硬件和操作系统,最主要的区别就是指令不同。比如同样执行a+b,A操作系统对应的二进制指令可能是10001000,而B操作系统对应的指令可能是11101110。那么,想要做到跨平台,最重要的就是可以根据对应的硬件和操作系统生成对应的二进制指令。

而这一工作,主要由我们的Java虚拟机完成。虽然Java语言是平台无关的,但是JVM确实平台有关的,不同的操作系统上面要安装对应的JVM。

java平台无关性(jvm,jdk,jre介绍),python也是跨平台的

有了Java虚拟机,想要执行a+b操作,A操作系统上面的虚拟机就会把指令翻译成10001000,B操作系统上面的虚拟机就会把指令翻译成11101110。

java平台无关性(jvm,jdk,jre介绍),python也是跨平台的

所以,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字节。

java平台无关性(jvm,jdk,jre介绍),python也是跨平台的

小结:

对于Java的平台无关性的支持是分布在整个Java体系结构中的。其中扮演者重要的角色的有Java语言规范、Class文件、Java虚拟机等。

  • Java语言规范
    • 通过规定Java语言中基本数据类型的取值范围和行为
  • Class文件
    • 所有Java文件要编译成统一的Class文件
  • Java虚拟机
    • 通过Java虚拟机将Class文件转成对应平台的二进制文件等

Java的平台无关性是建立在Java虚拟机的平台有关性基础之上的,是因为Java虚拟机屏蔽了底层操作系统和硬件的差异。

3,jvm,jdk,jre介绍

jdk,jre,jvm三者关系如图:

java平台无关性(jvm,jdk,jre介绍),python也是跨平台的

JDK(java development kit):java开发工具包,是整个java的核心,包括java运行环境jre,java工具和java基础类库

JRE(java runtime environment):是运行JAVA程序所必须的环境的集合,包含JVM标准实现及Java核心类库。

JVM(java virtual machine):java虚拟机,只认识 xxx.class 这种类型的文件,它能够将 class 文件中的字节码指令进行识别并调用操作系统向上的 API 完成动作。

4,python与java跨平台比较

python同一个版本的pyc,pyo也是跨平台的。 当然不能从PC跨到手机上。度也不能从intel跨到arm上,不能从64位跨到32位上。

java老实说跨平台的问能力也一样受限制,有各种各样的陷阱,有时候跨平台的代码也不能使用。不过答相对要比python好些。j2me除外。

java作为工程语言,它做一些中大型项目的能力是远超过python的。不过python做中小型项目的开发速度,也是远远不是java能够比内拟的。

通常java的速度比python快些。python调用C扩展除外。

java要装虚拟机,python要装编译运行知环境。跨平台道都是有限的,1.不能有windows特殊的东西,2.编码方式要兼容。python 比专java简单。