Java程序的跨平台性

我们一般将CPU处理器和操作系统的整体叫做平台。CPU种类繁多,如Intel、AMD、PowerPC等等。不同的CPU有不同的特定的指令集来计算和控制计算机系统。操作系统是用户和计算机之间交互的界面软件,不同操作系统支持不同的CPU,即不同操作系统支持不同的CPU指令集,但不一定一种操作系统唯一支持一种指令集。像Windows、Linux、Mac都支持Intel和AMD的CPU指令集。

如果我们要开发程序,则我们需要确认平台是什么——CPU的类型即指令类型和操作系统。如果用标准C开发程序,使用不同的编译器后的可执行文件是可以在对应的平台上运行的。比如使用GCC编译,生成可执行文件可以在Linux上运行。使用特定编译器编译的程序只能在对应的平台上运行,编译器是与平台相关的,编译后的文件也是与平台相关的。这种执行方式称作编译执行,它把源程序与特定平台的编译器一次性编译成平台相关的机器码。优点是执行速度快,缺点是无法跨平台

接着我们看看Java程序的跨平台性是怎么实现的——Java程序被编译成一种中间语言,再由JVM将Java字节码(.class文件)翻译成机器语言。Java源程序编译的结果是生成Java字节码,不同平台下生成的Java字节码是相同的,但由JVM翻译成的机器码却不一样。再次强调,跨平台的是Java程序,因为其后面会被与平台不相关的编译器编译成与平台不相关的中间码。JVM不是跨平台的。不同平台下需要安装不同的JVM。

总结一下,无论我们使用什么语言编程,最终要在设备上运行,那一定要被翻译成机器能识别执行的机器码。C、C++这种编译性语言,在不同的编译器下直接编译特定的机器码,在特定的平台下运行。而Java则属于先编译后解释型的语言。与平台不相关的编译器编译成了与平台不相关的.class文件,然后再由JVM解释成其平台下的机器码。就是由于多出的这个机制,让Java程序看起来与众不同。

有人会说,不同平台下使用的机器码是不同的,所以不同平台下的JVM一般不同,这样才翻译成不同的机器码,这跟C要被翻译成不同的机器码有什么本质不同吗?怎么多了个中间码就跨平台了。如果你还冒出这个疑惑,那说明你没有真正明白跨平台指代的对象。当提出的“跨平台性”等概念时候,我们一定要紧抓其指的对象到底是什么。不然云里雾里,基础不扎实,人容易心虚不自信。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,386评论 11 349
  • JVM、Java编译器和Java解释器 java解释器就是把在java虚拟机上运行的目标代码(字节码)解释成为具体...
    光剑书架上的书阅读 8,843评论 1 15
  • 这篇文章是我之前翻阅了不少的书籍以及从网络上收集的一些资料的整理,因此不免有一些不准确的地方,同时不同JDK版本的...
    高广超阅读 15,759评论 3 83
  • 一只邪恶的怪物,化为人形,为了获得最美味的人肉,它混进村子,收养了一个孤儿。悲伤与愤怒会使人的肉不美味,太胖太瘦也...
    孟浪之言阅读 317评论 0 0
  • 作为一个职业人必须要思考的四个问题: 1、你是谁? 要清晰明白自己到底是一个什么样的人?你拥有什么,你缺乏什么?人...
    有梦的人在启航阅读 413评论 0 0