C/C++比java效率高的原因?

zhou_lei 2008-07-31 09:58:34
在函数参数传递时,如果参数是数组之类的大数据,会使传送的时间和空间开销很大,严重地降低了程序的效率。最好的办法就是使用指针,即用指针变量作函数参数进行传送。这时由实参传向形参的只是地址,从而减少了时间和空间的开销。
而java不存在指针,参数传递的时候都是传递的数据本身,所以效率要低。

请问,这个是否是C/C++比java效率高的原因之一?
...全文
2867 56 打赏 收藏 转发到动态 举报
写回复
用AI写文章
56 条回复
切换为时间正序
请发表友善的回复…
发表回复
tomatosoft 2011-12-21
  • 打赏
  • 举报
回复
神人啊,Oracle是Java写的?太雷人了。[Quote=引用 53 楼 jlsplibo999 的回复:]

如果写的非常好的话比如说数据库oracle是JAVA写的,MSSQL是C++ 写的,你觉得哪个速度快,大公司都用ORACLE用MSSQL的非常少,如果一个菜鸟写程序当然C++快了,因为JAVA他不会用不会优化代码。
[/Quote]
空想家 2011-11-19
  • 打赏
  • 举报
回复
[Quote=引用 32 楼 jigsong 的回复:]
看到JAVA...
就想起青鸟之类的培训...
连中学生都可以去学,
for money
[/Quote]
国外的小孩从小选择软件方向的一般到中学都有十年编程经验了,仅凭学历就断定别人不能学这个,是否过于武断了?
yk2lt 2010-05-16
  • 打赏
  • 举报
回复
mark
jlsplibo999 2010-03-05
  • 打赏
  • 举报
回复
如果写的非常好的话比如说数据库oracle是JAVA写的,MSSQL是C++ 写的,你觉得哪个速度快,大公司都用ORACLE用MSSQL的非常少,如果一个菜鸟写程序当然C++快了,因为JAVA他不会用不会优化代码。
fonty 2009-05-29
  • 打赏
  • 举报
回复
测试过python的内存分配部分的代码,在分配次数小于1000000次的情况下,python的分配速度略小于malloc
在分配次数达到1000000次之后,python的分配代码才显得有优势,
java的内存分配代码也看过,但没有测试过,不过应该不会比python的代码速度快数量级。
DarknessTM 2008-09-04
  • 打赏
  • 举报
回复
一般来讲 JAVA高的是开发效率

但是从简单的数据操作来将,java和c/C++ 的效率是差不多的
比如 计算几万次加法之类的。

一般认为的C/c++的效率高的原因在于,对于不同平台,C/c++ 可以优化的更彻底。
最简单的例子是,C/c++开发者可以控制好系统的所有内存的使用,JAVA不行,除非JVM的智能能够比上最好的程序员
laibach0304 2008-08-19
  • 打赏
  • 举报
回复
[Quote=引用 36 楼 iwillalwaysloveyou 的回复:]
java的new指令,管理效率要远远高于c的malloc和c++的new,java不需要频繁的进行内存的释放。
java最大的缺陷是垃圾收集时java指令的执行要停下来,如果这个问题能解决的话,再结合jit,java确实可以比c快。
本人用c实现过java虚拟机
[/Quote]

C使用内存池同样能达到java new的效率,这是一个trade off的问题
是预先拿了再分出去就快
直接申请分配就慢

没有什么意义
laibach0304 2008-08-19
  • 打赏
  • 举报
回复
[Quote=引用 30 楼 iambic 的回复:]
>eclipse慢的要死
>anjuta就是比你快,你来咬我
IDE和记事本的比较。

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

>在垃圾收集上,java看似人性,但很不人性,在处理海量数据的时候,
>很容易把物理内存耗尽,然后死机,它的gc很垃圾
一、确定你的代码有没有内存泄露。
二、内存不够就设小点……
三、尽量使用内存是尊重硬件进步的体现。一个能充分利用硬件资源的系统,不见是一个坏的系统。比如你的电脑有…
[/Quote]

1.如果你这么说,我宁愿说是记事本和记事本的比较。
2.JAVA令人费解,劳民伤财的gc还用多说吗?这是一个双刃剑。当内存用的过多的时候会导致性能急剧下降,但C不会。
3.根本没有正面面对java跨平台性不好的问题,相反,C加上开源的库开发,的跨平台性可是好多了
晨星 2008-08-04
  • 打赏
  • 举报
回复
别的不说了。
楼主认为:Java中以数组做参数时,会拷贝数组中的所有元素,是这样吗?
如果是,那为什么不自己先试试再发言呢。你在Java中定义一个函数,用数组作参数,然后在函数中更改数组的某个元素,再在函数外打印一下看看,不就知道了么?
函数内部操作的是同一个数组,还是操作一份拷贝,结果很明显的。
bluejing0 2008-08-04
  • 打赏
  • 举报
回复
lz 先去看看JAVA是什么再发言好了。
JAVA里面不是没有指针,而是全是指针。
这是JAVA入门第一课就要记住的东西。
跟C++里的new 了就要delete一样重要。
t84770 2008-08-03
  • 打赏
  • 举报
回复
>我给大家一个比较公道的答案吧
>在Java版,Java绝对比C快,而且不是一般的快,Java多NB啊
>等你从Java版出来,C就比Java快了,恩恩
不同之处在于,Java版是比较谦虚的。在Java版,说Java比C快的,绝对没有在C版,说C比Java快的人多。

30楼兄弟够猛
说java 和c/c++哪个效率高纯属浪费自己的时间
有那时间看看c和java的书就知道了
这里争论也是白白浪费生命
自己得出的结论才 是最重要的
要相信自己楼主
你连自己都不相信 你肯定不会相信我们回帖的了
发这样的帖子
我看多数你是找骂
赵Andy 2008-08-03
  • 打赏
  • 举报
回复
mark
ForestDB 2008-08-03
  • 打赏
  • 举报
回复
TM全是指针...
Inhibitory 2008-08-03
  • 打赏
  • 举报
回复
没事找抽贴
zjplab 2008-08-03
  • 打赏
  • 举报
回复
很多人用过各种语言后,发现JAVA效率较低。其实,这是由JAVA极佳的面对对象的特性引起的。在实现多态性时,JAVA把所有的函数内设为C++中所说的虚函数(Virtual Function),这使得JAVA在面对对象,特别是多态性方面有高于C++的异常卓越表现;但是,虚函数实现的机理是一个动态的函数调用链表,这势必降低算法效率。随着C++的发展,JAVA相对于C++的优势已经不像很多大公司宣传的那样明显.
zming 2008-08-03
  • 打赏
  • 举报
回复
换言之,Java在你的虚拟机上的执行效率,依赖于你的C代码的执行效率,对吧?
mhyx_2008 2008-08-03
  • 打赏
  • 举报
回复
向孤身奋战的勇士 iambic 敬礼。o(∩_∩)o...
Maxwell 2008-08-02
  • 打赏
  • 举报
回复
java的new自己实现了内存管理,而c++中的利用的是系统中的,可能在这点上java比c++要快,但是c++可以在栈上分配空间,速度比java的new又不知快多少,而且stl里也有内存管理,另外还有很多内存管理的库,如果c++的new真需要提高效率的时候,java的new也是毫无优势。
iwillalwaysloveyou 2008-08-02
  • 打赏
  • 举报
回复
c真正的优势,并不在于效率,而在于,在系统级开发的时候是最佳的选择
iwillalwaysloveyou 2008-08-02
  • 打赏
  • 举报
回复
java的new指令,管理效率要远远高于c的malloc和c++的new,java不需要频繁的进行内存的释放。
java最大的缺陷是垃圾收集时java指令的执行要停下来,如果这个问题能解决的话,再结合jit,java确实可以比c快。
本人用c实现过java虚拟机
加载更多回复(36)

69,371

社区成员

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

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