java语言为什么使用的java虚拟机而不是直接翻译成机器代码(即和C语言一样)?

j... j 展开
 我来答
匿名用户
推荐于2018-04-26
展开全部
Java语言的一个非常重要的特点就是与平台的无关性。而使用Java虚拟机是实现这一特点的关键。一般的高级语言如果要在不同的平台上运行,至少需要编译成不同的目标代码。而引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用模式Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。 Java虚拟机的使用主体
追问
非常感谢您详尽的回答!

在学编译原理的时候知道,可以将源代码编译成为中间代码,然后再由中间代码生成机器代码,java生成的是否是.class文件是否就是中间代码呢?
同理C也可以做这样一个编译器,只是生成中间代码然后再在不同的平台上生成目标代码,这样可以满足平台无关性,可是为什么实际运用中没有把C做成一个平台无关性的语言,或者C是否可以做成一个平台无关性的语言呢?
吉他man0
2014-05-10 · 超过27用户采纳过TA的回答
知道答主
回答量:54
采纳率:0%
帮助的人:40.1万
展开全部
这就是java出现的原因啊!跨平台性!
如果编译成机器码的话那么就会和机器、操作系统绑定了,生成的执行文件只能在特定的操作系统上运行了,如果改了操作系统的话就要重新编译
java出现的时候就号称“一次编译,导出运行”,所以才要用虚拟机,我们编译后的代码只是给虚拟机执行的,虚拟机再帮我们翻译成操作系统能够识别的代码。(而虚拟机的实现由oracle公司实现)。比如windows有windows的虚拟机,linux有linux的虚拟机。所有我们编译后的代码无论放在windows还是linux上运行都没有问题!
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
林易木创建者
2014-05-10 · TA获得超过189个赞
知道答主
回答量:31
采纳率:0%
帮助的人:24.5万
展开全部
java是无平台限制的,而c不是跨平台的。也就是说java这样做的目的是使java编写的应用在任何机器上,只要该机器装上了java虚拟机就可以运行了。但是c就做不到这一点。java编译成class字节码文件,该文件是使用java虚拟机来运行。可以将编译好的class文件放到任何机器上运行,并且结果是一致的,但是c文件转移到不同的机器上都必须要重新编译,然后才能运行。这就是java采用这种方式的好处。希望能给你解惑
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
土憨宝
2014-05-10 · TA获得超过368个赞
知道小有建树答主
回答量:203
采纳率:100%
帮助的人:212万
展开全部
我个人理解,这个就有点像设计模式里面的适配器模式。每个虚拟机就是适配器接口的具体实现。一个虚拟机对应一个操作系统。而在这上面的java class文件就不需要关心具体的操作系统了,这样也就是java号称的跨平台。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
fly小松果
2020-11-16
知道答主
回答量:33
采纳率:0%
帮助的人:4.9万
展开全部
目前常用的系统或者平台其实没有几个,这种跨平台性,在我看来真的是浪费了。C/C++可以高效率运行是因为直接编译成机器码,按说Java语法的也可以的啊,只是它选择了虚拟机来搞快平台,用喜欢的语法,翻译成机器码,岂不是和C/C++一样的效率了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式