Java 跨平台原理

前言

与 C/C++ 不同,Java 规范中没有“依赖具体实现”的地方,基本数据类型大小以及有关算法都做了明确的说明。例如,Java 中 int 类型永远为 32 位整数,而 C/C++ 中 int 的类型大小有可能是16位,32位,也可能与编译器的设置有关。在java中,数据类型具有固定的大小,从而具有很好的可移植性。

C/C++ 中 int 的类型大小在不同的环境存在不一,有这几方面原因:

  1. C/C++规定int字长和机器字长相同;
  2. 操作系统字长和机器字长未必一致;
  3. 编译器根据操作系统字长来定义int字长。

因此我们可以得知,在一些没有操作系统的嵌入式计算机系统上,int 的长度与处理器字长一致;
有操作系统时,操作系统的字长与处理器的字长不一定一致,此时编译器根据操作系统的字长来定义 int 字长。

Java 跨平台的实现原理

什么是平台

所谓的平台,就是 CPU 和操作系统的结合体。

市面上 CPU 的种类很多,不同公司生产的 CPU 支持相同或不同的指令集。指令集就是 CPU 用来计算和控制计算机系统的一套指令的集合。

操作系统是充当用户和计算机之间交互的界面软件,不同的操作系统支持不同的 CPU,严格意义上说是不同的操作系统支持不同 CPU 的指令集。例如 Windows 和 Liunx都支持 Intel 和 AMD 的复杂指令集(CISC),但并不支持精简指令集(RISC)。

总之,开发程序,首先要确定该程序在什么 CPU 上运行,也就是要知道CPU 所使用的指令集,其次要确定操作系统。

实现机制

那 Java 如何实现开发语言跨平台呢?

Java首先利用文本编辑器编写 Java 源程序,源文件的后缀名为 .java;
再利用编译器(javac)将源程序编译成后缀名为 .class 的字节码文件;
最后利用虚拟机(解释器,java)解释执行。

下图是Java实现跨平台的机制。
在这里插入图片描述
Java的跨平台原理可以使用八个字修饰:一次编译,到处运行。

但是需要注意的是,Java 的跨平台性是需要该平台支持并安装相应的虚拟机,才可以在该平台上运行!!

如果该平台不知识 Java 虚拟机,则不能运行!

注意

  • 编译的结果不是生成机器码,而是生成字节码,字节码不能直接运行,必须通过 JVM 翻译成机器码才能运行。
  • 不同平台下编译生成的字节码是一样的,但是由 JVM 翻译成的机器码却不一样。
  • 跨平台的是 Java 程序,不是 JVM。
  • JVM 是用 C/C++ 开发的,与各个平台是相关的。
  • JVM 编译后的机器码是不能跨平台的。

与 C/C++ 对比

C/C++ 语言的跨平台原理:多次编译,到处运行。

下图是 C/C++ 不同平台运行的机制。
在这里插入图片描述
理论上,C/C++ 语言是执行机器码,而 Java 的执行增加了一个将字节码转换为机器码后再执行的步骤,所以Java的性能要低于 C/C++。但是经过虚拟机优化后,可以大幅提升执行效率,接近 C/C++ 的执行效率。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝带915

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值