对Java平台的理解

从几个问题引入:

  1. “一次编写,到处运行”
  2. Java是解释执行的吗?
  3. 自动垃圾收集

Java语言跨平台的含义以及实现原理

“Write once, run anywhere”是Java的一句被广为人知的宣传语。但很多人其实会把这句话记错,不知道怎么回事就记成了“一次编译,到处运行”。以为编译好后,放到不同平台上都能运行,当然不是这样!前几天学C++的舍友和我讨论两种语言的区别,提到Java跨平台的问题。最开始我对所谓跨平台没有进行思考,脑海中有个大致的印象就是“一次编译,到处执行”,在和舍友讨论的过程中,我才意识到自己的这种所谓的大致印象是错误的。下面就先从Java语言跨平台的含义说起。

“Java语言具有跨平台的特性”,这句话并不是说Java程序编译好后,拿到其他平台上就可以直接运行。

考虑C/C++等语言,在编程过程中,有时候会需要调用一些和具体操作系统API,也就是说对于不同OS来说,具有相同功能的API可能并不相同,所以在将代码迁移到其他OS上时,往往需要对编写好的源代码进行修改

而对Java语言来说,我们编写好的Java源代码经由javac编译成字节码(.class文件),然后经由JVM生成可以执行的目标机器代码。要运行Java程序同样需要安装Java环境(JRE/JDK),想想看,在选择下载哪个版本的JRE/JDK的时候是不是需要选择和自己OS对应的版本?JVM包含在JRE里面,也就是说针对不同的OS我们有不同版本的JVM。

不同平台运行不同的JVM,但JVM载入和执行同一种字节码。 大致可以推理出,Java语言在平台和程序之间建构了一个中间层(JVM),以实现语言和平台的解耦:

  • 语言层面遵循一定的规范,和系统相关的API被Java语言包装起来,经由JVM生成对应的机器代码。
  • 这个中间层接收一种平台无关的字节码,然后将其转换成不同平台对应的机器代码。

所以说 Java 语言的跨平台特性是 “.class”文件 和 JVM 共同造就的。

而“一次编译到处,到处执行”这句话是不对的,是 “一次编写,到处执行”
编写好Java源代码后,我们就可以在不同的安装了Java语言运行环境的机器上编译-运行这个程序,而 不需要改动源代码本身

(嗯,感觉自己写的好口水化 = =)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值