Java的平台无关性,可能你并不了解

Java的平台无关性

一次编译,到处运行

这是Java的一大特点,只需要一次编译,就可以在多种机器、系统上运行,即跨平台运行,这是很多语言(如c、cpp)所不能达到的。

为什么有些语言不能跨平台?

首先我们需要了解语言的执行的流程:

语言 ----> 机器语言

所有的语言最终都会变成机器语言,因为cpu只能看懂机器语言,执行机器指令。

对于c,cpp等编译性语言,通过编译,将源代码一次性编译成机器指令。

在这里插入图片描述

由于不同的平台(CPU)所对于的机器指令可能不相同,因此每次 编译 后的机器指令只能应用于对应的机器。

因此不能跨平台

为什么Java可以跨平台?

想要跨平台,那么我们需要到达这样的效果

在这里插入图片描述

但不同的机器平台所支持的机器码不同,而一次编译肯定只有一种结果,那么Java换了一个思维

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iifvhGNG-1595492480215)(/Users/chentao/Documents/md_img/image-20200722134404746.png)]
将Java源码编译成统一的字节码文件,由Java虚拟机(Java Virtual Machine,JVM)实时解释执行,而不同平台有着不同版本的JVM,当执行Java程序时,由JVM解释字节码文件,转换成对应的机器语言。(随着JVM的发展,目前是解释+编译执行)。

由于Java程序运行时,是解释执行的,所以速度一般比编译性语言慢一些,不过随着JVM的发展,Java程序的运行已经逐步变成解释+编译,速度有了提高。

JVM运行的是字节码文件,因此运行的不一定非要是Java语言,只要满足JVM的字节码规范即可,JVM现在已支持多种语言,除了Java之外,还有如Kotlin、Groovy、Jython等等

因此Java是跨平台的,当然Java虚拟机(JVM)不能跨平台,不同的平台有不同版本的Java虚拟机。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值