c的过程调用比java的快么?为什么?

xhy_851221 2008-10-13 10:45:42
RT
...全文
247 18 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
迷途的书童 2008-10-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wuyu637 的回复:]
java是解释执行。c是编译执行。

解释执行就是说,java的语句要在java虚拟机上转换成虚拟机内部代码,然后才转换为本地机器二进制代码。
而编译执行,是编译过程就把语句转换为二进制代码了,运行的时候只要加载就可以。不需要解释。转换。

所以java会比c慢。
[/Quote]

不错,学习。。。
Greg_han 2008-10-20
  • 打赏
  • 举报
回复
来学习一下
lann64 2008-10-20
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 redleaves 的回复:]
速度是和具体实现密切相关的,而非仅仅语言.
C和Java的语言模型不一样,很难说哪种方式快一些(原则上,在简单的场合,C会快一些),只是适用的场合不同.
非要说他们的差距,无非是C可以做到Java做不到的.但这并不意味着C就一定比Java快.
[/Quote]
比快慢当然不是哪个语言快,而是比实现。虚拟机方式比编译成机器码方式慢,这个还需要讨论吗?那是肯定的。
当然,虚拟机方式获得了另外的好处,其一是可移植性大大提高了,其二是从源码到中间码编译相对简单了。
hyyuanqiang 2008-10-20
  • 打赏
  • 举报
回复
re
xhy_851221 2008-10-20
  • 打赏
  • 举报
回复
你说的是部分原因,我认为最主要的原因是:java用堆栈传递参数,而C用寄存器传递。我不太确定,是否有人听说个这个原因?
yang_dk 2008-10-14
  • 打赏
  • 举报
回复
不能简单这么比,尺有所短寸有所长
C和JAVA都是很伟大的编程语言
xyxwangkai 2008-10-13
  • 打赏
  • 举报
回复
编译后的Java程序指令并不直接在硬件系统的CPIJ上执行,而是由JVM执行。JVM是编译后的Java程序和硬件系统之间的接口,程序员可以把JVM看作一个虚拟的处理器。它不仅解释执行编译后的Java指令,而且还进行安全检查。它是Java程序能在多平台间进行无缝移植的可靠保证,同时也是Java程序的安全检验引擎。

所以多了jvm,c就不需要,但就不能向java那样跨平台
xiang_jun 2008-10-13
  • 打赏
  • 举报
回复
主要还是在多一个虚拟机问题上!
goodstudentli 2008-10-13
  • 打赏
  • 举报
回复
学习了。
once_and_again 2008-10-13
  • 打赏
  • 举报
回复
虚拟机
TADICAN 2008-10-13
  • 打赏
  • 举报
回复
java多了一层虚拟机,它自己模拟了计算机的寄存器,堆,栈,模拟的寄存器速度是不可能达到cpu自身寄存器的速度的,它自己管理堆栈也相当于重复做了操作系统已经做过的东西。
从函数调用上讲,上面这个事实已经不可避免的降低了它调用函数的速度。
如一楼所说,它是解释执行的。本来cpu里面的一些机器指令如mov,add等等它都不能直接使用,它有自己的指令集,以编译后的二进制存储,每次它读到一条指令后先要解释是干什么的,然后转换成本机的机器指令,就相当于本来一条本地指令就可以完成的东西,它却要做许多额外的工作(翻译自己的指令成本地机器指令,这是虚拟机做的事),这导致了函数执行速度慢。现在有JIT技术,可以直接把二进制码转换成本地机器指令,但是这导致了其跨平台成为不可能。
当然它跨平台是一种伟大的成功!
zgjxwl 2008-10-13
  • 打赏
  • 举报
回复
恩,同意楼上的,一边解释一边执行(即解释一条语句再执行一条语句)当然会比编译成了机器代码再执行的速度慢了

但是一般还是多用解释执行,因为解释器有优于编译器的一个特性,编译器在编译源代码的时候会产生较长延迟,而解释器直接就可以执行了,延迟较小
wuyu637 2008-10-13
  • 打赏
  • 举报
回复
java是解释执行。c是编译执行。

解释执行就是说,java的语句要在java虚拟机上转换成虚拟机内部代码,然后才转换为本地机器二进制代码。
而编译执行,是编译过程就把语句转换为二进制代码了,运行的时候只要加载就可以。不需要解释。转换。

所以java会比c慢。
redleaves 2008-10-13
  • 打赏
  • 举报
回复
速度是和具体实现密切相关的,而非仅仅语言.
C和Java的语言模型不一样,很难说哪种方式快一些(原则上,在简单的场合,C会快一些),只是适用的场合不同.
非要说他们的差距,无非是C可以做到Java做不到的.但这并不意味着C就一定比Java快.
xianyuxiaoqiang 2008-10-13
  • 打赏
  • 举报
回复
JVM有时还会停下来进行内存清理。c的垃圾处理由程序员自己负责。
zh291 2008-10-13
  • 打赏
  • 举报
回复
jvm有两种方式
一个就是楼上诸兄所说的解释型;

其实他还有一种机制JIT,调用频繁的代码会转换成机器码缓存在jvm中,执行就调用。
ITdogdog 2008-10-13
  • 打赏
  • 举报
回复
C是一种面向过程的结构化语言,可以实现对硬件的编程操作,是高级语言中相对低级的一种语言,编译执行效率都比较高~~当C编译器编译生成一个对象的代码时,该代码是为在某一特定硬件平台运行而产生的。因此,在编译过程中,编译程序通过查表将所有对符号的引用转换为特定的内存偏移量,以保证程序运行.
Java是一种纯面向对象语言,Java编译程序将Java源程序翻译为JVM可执行代码----字节码,再由解释器在运行过程中创立内存布局,然后再通过查表来确定一个方法所在的地址.
所以,相比之下,java的调用是比较慢的.
sunhao_v 2008-10-13
  • 打赏
  • 举报
回复

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧