今天在书上看到了java语言是先编译成与平台无关的字节码,再由各平台的虚拟机解释成该虚拟机能够执行的机器码,小白这里就有了个问题,这种做法和在不同平台上实现java的解释器有什么区别么,如果没有区别,那多了编译过程岂不是白白降低了运行效率?
1条回答 默认 最新
- threenewbee 2017-02-04 20:27关注
字节码相当于预处理,它虽然是平台无关,但是也已经把高级语言的一些语法处理成接近低级语言的了。因此目标平台的jit编译器只需要很少的工作就可以得到机器代码并且执行。
解释器面对的是完全的源代码,它的翻译效率很低,解释执行比编译执行慢几个数量级,看看ruby之类的语言(对比jruby)就知道了。
另外,java字节码是语言无关的,换言之,java不是唯一可以编译为java字节码的原始高级语言。scala、jruby等等语言也可以编译为java字节码,而java语言本身升级添加新的语法,也可以编译出兼容之前java语言的字节码,不用更换jvm就可运行。如果是解释器,那么如果要改进java语言,或者设计另一种语言,就需要单独为它们编写解释器了。
最后,你有一个说错了,是java跨平台,或者java字节码跨平台,java虚拟机可不是跨平台的。x86 arm x64 mips等等不同cpu不同os都有自己的java虚拟机。
换一个角度看,java虚拟机实现了多种编译器共享一个后端编译器i(jit)和这个编译器对应的语法特性(比如ast,比如泛型等等)本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 如何让企业微信机器人实现消息汇总整合
- ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
- ¥15 如何用Python爬取各高校教师公开的教育和工作经历
- ¥15 TLE9879QXA40 电机驱动
- ¥20 对于工程问题的非线性数学模型进行线性化
- ¥15 Mirare PLUS 进行密钥认证?(详解)
- ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
- ¥20 想用ollama做一个自己的AI数据库
- ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
- ¥15 请问怎么才能复现这样的图呀