社区
C语言
帖子详情
c的过程调用比java的快么?为什么?
xhy_851221
2008-10-13 10:45:42
RT
...全文
250
18
打赏
收藏
c的过程调用比java的快么?为什么?
RT
复制链接
扫一扫
分享
转发到动态
举报
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
打赏
举报
回复
顶
遥感监测基于RADD算法的森林变化检测系统:多区域警报与基线数据可视化建模
内容概要:本文介绍了一个基于Google Earth Engine平台的
Java
Script代码实现,旨在可视化RADD(遥感农业与森林警报)数据集中的森林基线与警报信息。通过构建模块化的程序结构,分别实现了数据获取(Model)、样式设置(Styling)、地图组件添加(Composition)以及地图初始化等功能。核心操作包括加载RADD图像集合,提取非洲、南美、亚洲和中美洲等区域的森林基线和警报数据,进行影像融合,并以不同颜色渲染警报置信度与警报发生时间,最终叠加在卫星底图上呈现。; 适合人群:具备Earth Engine基础或有一定遥感数据处理经验的地理信息系统(GIS)研究人员、环境监测
paging-compose-common-iossimulatorarm64-3.3.0-alpha02-0.5.1-
paging-compose-common-iossimulatorarm64-3.3.0-alpha02-0.5.1-
java
doc.jar
axon-test-0.0.15-
java
doc.jar
axon-test-0.0.15-
java
doc.jar
appsync-jvm-0.21.1-beta-
java
doc.jar
appsync-jvm-0.21.1-beta-
java
doc.jar
elasticinference-jvm-1.3.48-
java
doc.jar
elasticinference-jvm-1.3.48-
java
doc.jar
C语言
70,023
社区成员
243,253
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章