社区
C语言
帖子详情
c的过程调用比java的快么?为什么?
xhy_851221
2008-10-13 10:45:42
RT
...全文
307
18
打赏
收藏
c的过程调用比java的快么?为什么?
RT
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
打赏
举报
回复
顶
使用
Java
调用
C/C++
本文介绍了如何使用
Java
Native Interface (JNI)
调用
C/C++代码,包括编写
Java
代码、生成C/C++头文件、实现C++代码、构建DLL以及将DLL与
Java
工程整合的详细步骤。通过示例展示了从创建native方法到成功
调用
的
过程
。
Java
-JNI
调用
过程
本文详细介绍了
Java
通过JNI
调用
本地方法的
过程
,包括为什么需要JNI、JNI
调用
的问题以及实现步骤。在实现部分,文章描述了从定义
Java
native方法、生成头文件、创建CPP文件到编译动态链接库的完整流程,并在测试中解决了找不到动态链接库的问题。最后,文章总结了JNI在代理模式中的角色,强调了其作为跨语言
调用
桥梁的功能。
Runtime的独特魅力:为什么有时候
Java
比C还
快
?
通常认为 C 更高效,但
Java
有时比 C 运行得
快
。这得益于
Java
虚拟机的运行时优化,如即时编译(JIT)、逃逸分析和栈上分配、垃圾回收、内联优化、多线程优化、数值优化和编译器插桩等。在字符串拼接等场景,
Java
表现更优。
Java
调用
C
本文详细介绍了如何使用
Java
Native Interface(JNI)在
Java
应用程序中
调用
C代码。首先,我们探讨了为什么需要进行
Java
和C的互操作,然后通过一个实例展示了创建本地方法、编写C代码、编译动态链接库以及在
Java
中
调用
这些方法的步骤。最后,讨论了使用JNI时需要注意的性能和安全性问题。
c为什么比
java
快
,为什么
Java
的运行比C
快
在这里?
本文探讨了C和
Java
在执行一个无限循环时的惊人速度差异,C未优化版本慢于
Java
,但使用-O3优化后两者接近。
Java
默认优化更高效,解释了原始结果中
Java
运行速度约3倍于C的原因。通过剖析编译后的代码,揭示了
Java
虚拟机和即时编译器在性能优化上的优势。
C语言
70,039
社区成员
243,246
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章