C和Java的java执行效率率相差很大吗

C和JAVA的差距好大_c吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:84,832贴子:
C和JAVA的差距好大收藏
单看看贴吧C是6万多而JAVA竟然有20多万的关注,差距好大啊!
Altera与英特尔强强联合,让编程成就更多!
是26万……
你要看的是C语言吧不是C吧,C语言吧关注32.7万
   ——我要给你生猴子
你永远不会知道这句话的真正含义
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或我回告诉你们Java真的不比C++慢多少吗?_图拉丁吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:843,570贴子:
我回告诉你们Java真的不比C++慢多少吗?收藏
最近在坛子里看到帖子《android其实是黑ARM的系统》。里面有人说,Java本来就慢。我很想回一句WTF。。。或者回一句呵呵。用外面的电脑码算法题的时候,我总会测一下CPU的单核运算力。每次的结果都是,Java只比C++略逊,而且是OpenJDK的时候。今天在自己的电脑上测了一下JDK7和G++4.7.2,结果亮瞎了我的钛合金狗眼啊。这是用来测试的代码,显然,它们都执行了1e8次正弦运算和1e8次取模运算,以及1e8次整数的自增。这是我的Java,G++版本,以及运行效果,G++用了O2优化,结果还是被Java完破了?这是我的cpuinfo,莫非,是这个CPU浮点运算力不济?Java的JIT技术其实是非常牛逼的,而且传说Java会在解释字节码的时候进行运行时优化,所以Java的优化效果还是很好的。黑Java的伢,你们有什么好说的吗?
Altera与英特尔强强联合,让编程成就更多!
作为程序员的我,看到说什么什么需要牛逼的言论,现在只会呵呵一笑。这本身就是一个幼稚的命题。我总常跟学生和新手说一句:只有垃圾的程序员,木有垃圾的语言,再牛逼的语言,也不能掩盖你的弱智
这个, java本身又没什么问题, 而且android的jvm执行效率也没那么差, 不做相关开发的不会明白的, 只是靠自己的臆测在哪里yy
正常,谷歌出的一个js语言在某些计算上完爆了C++..是js..各个语言有它的长处。PS:试试看算string,这个比较考验效率。找俩大string 对着复制,我猜是java赢
说真的,当时看到这贴,真有冲动去证明什么。最后还是决定不跳入这个错误的命题里浮游,十分敬佩楼主完成了我当初的冲动。楼主不要较真,只有刚入门的人,才会去争执语言好坏
很流鼻的样子~~~~你们
JVM这个主要时间浪费在预加载上,执行的话差不多。你加载时间没体现出来。在一个系统上,运行JAVA跳入虚拟机的时间是很耗费的
其实这个情况, 搞andorid开发的比较有发言权, 不了解andorid的jvm机制的情况下 还是不要臆测的好。
原理就是JAVA要经过一轮解释,然后在内存中开辟一块给解释好的bin code做缓冲,然后再去lunch这段RAM中的bincode光比较object code的执行时间无意义。JAVA是动态解释的,要把这个解释翻译时间也要加上
double类型在JAVA中应该是近似运算。应该这里作弊了
投资上玖富网,注册即可获得300元红包!3000万+注册用户,银行及风控体系
楼主的东西不错。呃,我忘了黑java的人是谁了,再去看看那个帖子
JAVA不可能比C++快!
JAVA和C比比还行吧,C++应用广的多啊
虽不懂 但觉厉
个人认为C/C++性能方面比JAVA强。特别在内存管理方面。但并不能说ANDROID虚拟机就是烂系统。实际上ANDROID虚拟机在解释运行时的效率很高。Google选JAVA,更多是为了生产效率,快速构建生态系统。事实上证明Google这个策略成功了。而Google占领市场后目前也开始注意优化系统的性能。包括支持NDK引用原生C、C++。因而,android进化到现在的版本已经不是一个低效率低性能的系统。
楼上已经有高手打LZ脸了。。。目测LZ是搞JAVA的
此事必有蹊跷
如果说java比c快一点还是可能的。但你这快了好几倍。4秒对比17秒sin函数本身计算是一个无穷级数。你不知程序实现的时候到底取了多少级的级数。如果取的不一样,那计算精度就不一样,运算时间比较起来也就没意义了
听说安卓支持C#了
一个是伪代码 一个是编译成机器码
那个好 那个贴近机器
这是编程最简单的基础知识了 为什么 汇编到现在还保留
代码效率高 比c++编译出来的都高 这点 在单片机上最能体现
本屌是搞安卓的,java慢在加载类上。楼主这个就一个类,和c差别不大。
如果是电脑上面的执行效率很容易查到撒benchmarksgame点alioth点debian点org
对于各种语言的争议就好比卡巴的用什么黑什么,有很多东西深入进去确实有点让人无语 以至于有大量专门说这个的文章...........黑的比较多的就是Java、C++、PHP、Javascript(毕竟一个十天就设计出来的语言不能多求什么)说好的比较多的就是Python、Ruby、各类较新语言还有就是Lisp.......不过不看这些程序员们的牢骚,不用学术的指标去看语言的优劣,实际情况是.........Ruby是个很好的语言,而Twitter迁移到Java之后,Java的效果似乎更胜一筹。说到底这玩意和我们买东西的性价比是一样的,不同的环境需求有不同的选择。移动平台说java不大清楚 - -但是费电和执行效率(配置需求)这两点倒是见说的很多,不过手机硬件也在飞速发展,慢慢这些就不明显了。
虽然不懂,但看上去好厉害的样子。
在那帖子我也说过,Android效率不高的主要原因并不是因为JAVA。
还有,楼主只用这个测式来证明JAVA效率不比C++慢未免有些以点盖面,太片面了。你这种测试与只用象棋测CPU性能又有何区别?
用java玩个汇编让大家看看用java玩个sse指令让大家看看用java玩个显卡加速指令让大家看看关键不是java慢而是C/C++外挂太多这也是为什么视频解码都用C/C++写的原因最不济也有个汇编用稍微加个sse外挂已经很快乐加上显卡加速直接秒2160p
java是解释性语言,java程序在运行时类加载器从类路经中加载相关的类,然后java虚拟机读取该类文件的字节,执行相应操作C++编译的时候将程序编译成本地机器码.一般来说java程序执行速度要比C++慢.即使Java采用just-in-time compiling (读取类文件字节后,编译成本地机器码)技术,速度也要比C++慢好多.java程序有要从网络上加载类字节,然后执行,这也是导致java运行速度慢的原因在程序运行过程中,java虚拟机要检测数组是否越界,在C++中则不检测.java中所有的对象都创建在堆中,没有对象被创建在stack中,而C++有的对象和变量是创建在stack中的java在运行过程中检测对象的引用是否为空,如果引用指向都空指针,且执行某个方法时会抛出空指针异常java运行时对类型检测,如果类型不正确会抛出ClassCastException异常.java的垃圾回收机制较C++由程序员管理内存效率更低.java中的原始数据类型在每个操作系统平台长度都是相同,而C++这些数据类型长度是随操作系统的不同而不同,所以java在不同操作系统上执行时有个转化过程.在java中String 是UNICODE.当java要操作一个 ASCII string 时,比C++效率上相对要低一些.java中采用的是动态链接
java/brew这些有一个缺陷就是要stack check,如果不检查,除非程序员看ram mapping表计算好RAM开销,否则安全性很难保证。注定了layer1永远没它的用武之地。android的内存管理,在安装了较多app的时候,也一直有问题,3.0以上不是因为系统做的好了,而是硬件资源大了。
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或C++的坑真的多吗?&--C&C++&Java的对比部分很好
C++的坑真的多吗?
人阅读 & &
先说明一下,我不希望本文变成语言争论贴。希望下面的文章能让我们客观理性地了解C++这个语言。(另,我觉得技术争论不要停留在非黑即白的二元价值观上,这样争论无非就是比谁的嗓门大,比哪一方的观点强,毫无价值。我们应该多看看技术是怎么演进的,怎么取舍的。)
周五的时候,我在我的微博上发了一个贴说了一下一个网友给我发来的C++程序的规范和内存管理写的不是很好(后来我删除了,因为当事人要求),我并非批判,只是想说明其实程序员是需要一些“疫苗”的,并以此想开一个“程序员疫苗的网站”,结果,@简悦云风同学:“不要用
C++ 直接用 C , 就没那么多坑了。”就把这个事带入了语言之争。
&:&说C++比C的坑更多的人我可以理解,但理性地思考一下。C语言的坑也不少啊,如果说C语言有90个坑,那么C++就是100个坑(另,我看很多人都把C语言上的坑也归到了C++上来),但是C++你得到的东西更多,封装,多态,继承扩展,泛型编程,智能指针,……,你得到了500%东西,但却只多了10%的坑,多值啊。
结果引来了更多的回复(只节选了一些言论):
那么,C++的坑真的多么?我还请大家理性地思考一下。
C++真的比C差吗?
我们先来看一个图——《》,从这个图上看,C程序员比C++的程序员在注释中使用fuck的字眼多一倍。这说明了什么?我个人觉得这说明C程序员没有C++程序员淡定。
不要太纠结上图,只是轻松一下,我没那么无聊,让我们来看点真正的论据。
相信用过C++的程序员知道,C++的很多特性主要就是解决C语言中的各种不完美和缺陷:(注:C89、C99中许多的改进正是从C++中所引进的)
(注意:上面我没有提重载运算符和异常,前者写出来的代码并不易读和易维护(参看《》后面的那个示例),坑也多,后者并不成熟(相对于Java的异常),但是我们需要知道try-catch这种方式比传统的不断地判断函数返回值和errno形成的大量的if-else在代码可读性上要好很多)
上述的这些东西填了不知有多少的C语言编程和维护的坑。少用指针,多用引用,试试autoptr,用用封装,继承,多态和函数重载……
你面对的坑只会比C少,不会多。
C++的坑有多少?
C++的坑真的不多,如果你能花两到三周的时候读一下《》里的那50多个条款,你就知道C++里的坑并不多,而且,有很多条款告诉我们C++是怎么解决C的坑的。然后,你可以读读《》和《》,你可以了解一下C++各种问题的解决方法和一些常见的经典错误。
当然,C++在解决了很多C语的坑的同时,也因为OO和泛型又引入了一些坑。消一些,加一些,我个人感觉上总体上只比C多10%左右吧。但是你有了开发速度更快,代码更易读,更易维护的500%的利益。
另外,不可否认的是,C++中的代码出了错误,有时候很难搞,而且似乎用C++的人会觉得C++更容易出错?我觉得主要是下面几个原因:
另外,C++的编译对标准C++的实现各异,支持地也千差万别,所以会有一些比较奇怪的问题,但是如果你一般用用C++的封装,继承,多态,以及namespace,const,
refernece, &inline, templete, overloap,
autoptr,还有一些OO 模式,并不会出现奇怪的问题。
而对于STL中的各种坑,我觉得是程序员们还对GP(泛型编程)理解得还不够,STL是泛型编程的顶级实践!属于是大师级的作品,一般人很难理解。必需承认STL写出来的代码和编译错误的确相当复杂晦涩,太难懂了。这也是C++的一个诟病。
“C++是一门很恐怖的语言,而比它更恐怖的是很多不合格的程序员在使用着它”。注意我飘红了“很多不合格的程序员”!
我觉得C++并不适合初级程序员使用,C++只适合高级程序员使用(参看《》和《》),正如《》中说的,C++适合那些对开发维护效率和系统性能同时关注的高级程序员使用。
这就好像飞机一样,开飞机很难,开飞机要注意的东西太多太多,对驾驶员的要求很高,但你不能说飞机这个工具很烂,开飞机的坑太多。(注:我这里并不是说C++是飞机,C是汽车,C++和C的差距,比飞机到汽车的差距少太多太多,这里主要是类比,我们对待C++语言的心态!)
理解C++设计的最佳读本是《》,在这本书中Stroustrup说了些事:
1)Stroustrup对C是非常欣赏,实际上早期C++许多的工作是对于C的强化和净化,并把完全兼容C作为强制性要求。C89、C99中许多的改进正是从C++中所引进。可见,Stroustrup对C语言的贡献非常之大。今天不管你对C++怎么看,C++的确扩展和进化了C,对C造成了深远的影响。
2)Stroustrup对于C的抱怨主要来源于两个方面——在C++兼容C的过程中遇到了不少设计实现上的麻烦;以及守旧的K&R
C程序员对Stroustrup的批评。很多人说C++的恶梦就是要去兼容于C,这并不无道理(Java就干的比C++彻底得多),但这并不是Stroustrup考虑的,Stroustrup一边在使尽浑身解数来兼容C,另一方面在拼命地优化C。
3)Stroustrup在书中直接说,C++最大的竞争对手正是C,他的目的就是——C能做到的,C++也必须做到,而且要做的更好。大家觉得是不是做到了?有多少做到了,有多少还没有做到?
4)对于同时关注的运行效率和开发效率的程序员,Stroustrup多次强调C++的目标是——“在保证效率与C语言相当的情况下,加强程序的组织性;能保证同样功能的程序,C++更短小”,这正是浅封装的核心思想。而不是过渡设计的OO。(参看:)
5)这本书中举了很多例子来回应那些批评C++有运行性能问题的人。C++在其第二个版本中,引入了虚函数机制,这是C++效率最大的瓶颈了,但我个人认为虚函数就是多了一次加法运算,但让我们的代码能有更好的组织,极大增加了程序的阅读和降底了维护成本。(注:Lippman的《》也说明了C++不比C的程序在运行性能低。Bruce的《》也说C++和C的性能相差只有5%)
6)这本书中还讲了一些C++的痛苦的取舍,印象最深的就是多重继承,提出,拿掉,再被提出,反复很多次,大家在得与失中不断地辩论和取舍。这个过程让我最大的收获是——a)&对于任何一种设计都有好有坏,都只能偏重一方,b)&完全否定式的批评是不好的心态,好的心态应该是建设性地批评。
我对C++的感情
我先说说我学C++的经历。
我毕业时,是直接从C跳过C++学Java的,但是学Java的时候,不知道为什么Java要设计成这样,只好回头看C++,结果学C++的时候又有很多不懂,又只得回头看C,最后发现,C
-& C++ -& Java的过程,就是C++填C的坑,Java填C++的坑的过程。
注,下面这些东西可以看到Java在填C/C++坑:
当然时代还在前进,这个演变的过程还在C#和Go上体现着。不过我学习了C -& C++
&-& Java这个填坑演进的过程,让我明白了很多东西:
我从这个学习过程中得到的最大的收获不是语言本身,而是各式各样的编程技术和方法,和技术的演进的过程,这比语言本身更重要!(在这个角度上学习,你看到的不是一个又一个的坑,你看到的是——各式各样让你可以爬得更高的梯子)
我对C++的感情有三个过程:先是喜欢地要死,然后是恨地要死,现在的又爱又恨,爱的是这个语言,恨的是很多不合格的人在滥用和凌辱它。
C++语言发展大概可以分为三个阶段():
在《》中说了 ,性能主要就是要省电,省电就是省钱,在数据中心还不明显,在手机上就更明显了,这就是为什么Android
支持C++的原因。所以,在NB的电池或是能源出现之前,如果你需要注重程序的运行性能和开发效率,并更关注程序的运性能,那么,应该首选
C++。这就是iOS开发也支持C++的原因。
今天的C++11中不但有更多更不错的东西,而且,还填了更多原来C++的坑。(参看:,)
最后,非常感谢能和“@简悦云风”,“@淘宝诸霸”,“@Laruence”一起讨论这个问题!无论你们的观点怎么样,我都和你们“在一起”,嘿嘿嘿……
(转载本站文章请注明作者和出处&&,请勿用于任何商业用途)
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

我要回帖

更多关于 java 代码执行效率 的文章

 

随机推荐