游侠NETSHOW论坛

标题: 为何java语言执行效率比c++慢20倍还有人用呢? [打印本页]

作者: zhaotianyu    时间: 2011-6-6 11:55:46     标题: 为何java语言执行效率比c++慢20倍还有人用呢?

貌似是百科上看到的,说java比c++效率慢20倍,事实上早期玩java游戏的时候也发现比较慢,我就很好奇,为何这样还有人要用这种语言,而且还是android这样的系统
作者: 八仙过人    时间: 2011-6-6 12:02:17

java是种解释型语言,需要虚拟机工作,某种方面可以说跨平台性好,而且本身语法有点像c++简化版,学起来也容易,加上现在运行速度越来越快,还是有用的……
作者: china.gll2    时间: 2011-6-6 12:03:33

本帖最后由 china.gll2 于 2011-6-6 12:04 编辑

学着简单、用着省事,运行慢?那是软件使用者关心的问题,开发者无所谓...

而且有时必须把软件做慢一点、卡一点、大一点,这样看起来才像大作。
作者: abc8999    时间: 2011-6-6 12:08:14

C++比机器语言也慢的多...为什么不用机器语言开发啊???

因为方便开发呗...
作者: 523486774    时间: 2011-6-6 12:13:46

0101的机器语言最快...C语言都自叹不如 那怎么会有C语言? 01010101你来写才行了
作者: china.gll2    时间: 2011-6-6 12:14:45

JAVA还不错,只是局限性大,不过已经精通一门语言再学什么都不怎么费力了。大不了多学几门换着用。
作者: lhstop    时间: 2011-6-6 12:15:53

回复 八仙过人 的帖子

你牛输了第3战,Miami in 6!!!
作者: socket9999    时间: 2011-6-6 12:16:15

abc8999 发表于 2011-6-6 12:08
C++比机器语言也慢的多...为什么不用机器语言开发啊???

因为方便开发呗...

那倒不至于。编译器优化好的C++代码可能比你自己写的汇编快。



作者: DD51    时间: 2011-6-6 12:18:21

按露珠的逻辑来看VB就不应该出生了吧...


作者: abc8999    时间: 2011-6-6 13:12:45

socket9999 发表于 2011-6-6 12:16
那倒不至于。编译器优化好的C++代码可能比你自己写的汇编快。

汇编语言不是机器语言
C++写的能比汇编快的..现在用汇编写还适合么?

作者: sea    时间: 2011-6-6 13:17:32

C++好像只能在x86上用吧,因为它也是基于x86指令集的。而java可以做嵌入式开发,还有app开发都是用java

汇编就太古老了,连结构化程序都不算,更不提面向对象了,用那个东西你要学一大堆无关紧要的知识,复杂性太高。
作者: pzkpfw4    时间: 2011-6-6 13:18:20

虽然执行效率低些,但JAVA开发效率高啊!
作者: china.gll2    时间: 2011-6-6 13:18:58

本帖最后由 china.gll2 于 2011-6-6 13:22 编辑

现在对于大多数程序员,汇编不是用来写、而是用来看、用来分析的。

特别是对与搞hacker,搞破解、写个外挂,汇编是第一堂课就要学的基本功。
作者: china.gll2    时间: 2011-6-6 13:23:25

sea 发表于 2011-6-6 13:17
C++好像只能在x86上用吧,因为它也是基于x86指令集的。而java可以做嵌入式开发,还有app开发都是用java

汇 ...

阁下对C++的认识让在下肃然起敬...[寒死]

作者: sea    时间: 2011-6-6 13:28:52

回复 china.gll2 的帖子

说错了吗?多包含啊,对于C++、JAVA我只了解一些基本语法,没用它们做过程序。


平日都是用vb加sql做一些dbms,最近在学php,个人觉得程序够用就好,没有要学复杂了。



作者: china.gll2    时间: 2011-6-6 13:32:23

sea 发表于 2011-6-6 13:28
回复 china.gll2 的帖子

说错了吗?多包含啊,对于C++、JAVA我只了解一些基本语法,没用它们做过程序。

这不怪你,中国很多大学生都把C++和VC(mfc)混为一谈。

作者: game`    时间: 2011-6-6 13:33:29

JAVA可是SUN公司的杰作啊,完全的面向对象的语言

作者: socket9999    时间: 2011-6-6 13:36:51

abc8999 发表于 2011-6-6 13:12
汇编语言不是机器语言
C++写的能比汇编快的..现在用汇编写还适合么?

汇编语言就是是机器码的助记符……



作者: sea    时间: 2011-6-6 13:39:02

回复 china.gll2 的帖子

编程我是自学的,兴趣爱好罢了。

个人觉得学编程,学得复杂用处也不大


作者: socket9999    时间: 2011-6-6 13:41:39

sea 发表于 2011-6-6 13:39
回复 china.gll2 的帖子

编程我是自学的,兴趣爱好罢了。

看你以后干啥了。不当码工的话,精通C++确实用处不大,有空不如研究点算法。



作者: sololie    时间: 2011-6-6 13:43:00

c的执行效率最为接近汇编,为什么还用c++啊?
程序这东西,作为一项工程,首要考虑的开发效率及成本,成本包括制作成本和维护成本,最后才考虑性能。我们身在商品社会。
作者: china.gll2    时间: 2011-6-6 13:43:15

socket9999 发表于 2011-6-6 13:41
看你以后干啥了。不当码工的话,精通C++确实用处不大,有空不如研究点算法。

研究算法也是用C/C++更方便。

作者: hellbee    时间: 2011-6-6 13:43:44

java虽然不是第一个面向对象的,但它是面向对象里最成熟的,之后出的很多语言也都借鉴它的长处,稳重,可靠,虽然有时候感觉有些笨拙,但代码越多这点越不明显
作者: socket9999    时间: 2011-6-6 13:46:13

china.gll2 发表于 2011-6-6 13:43
研究算法也是用C/C++更方便。

只研究算法的话,可以先不学模板、虚函数、拷贝构造、单件什么的



作者: kudo23    时间: 2011-6-6 13:49:40

java和C++应用场景不同

C一般用于开发实时性要求比较高的程序,比如桌面应用及3D游戏,换做JAVA必定要悲剧

JAVA多用于企业级开发,多用于后台服务程序,接受客户端请求,经数据库操作后返回用户结果,比如网站后台,MIS系统等,这类系统的性能瓶颈往往是在数据库查询和网络传输上,而不在语言本身执行效率上
作者: sololie    时间: 2011-6-6 13:51:05

大家都喜欢讲些自己都一知半解的东西,而且还一本正经的样子
作者: 501392    时间: 2011-6-6 13:52:26

汇编语言和机器语言是一一对应的  汇编就是助记符 不存在机器语言比汇编快的说法
c++,c语言最终都是编译成机器语言后执行
汇编比C++快?
C++的编译器在编译过程中会针对cpu的架构专门优化(比如减少指令流水线的断流)
如果你直接用汇编写 除非你是写编译器的高手 否则根本无法优化
汇编现在主要用于写一些底层软件 并不是因为它比c,c++快   
而是因为汇编可以直接操作硬件(寄存器,内存,端口)
JAVA速度比C++慢 是因为JAVA写好后不是编译成机器语言而是编译成一种由JAVA虚拟机解释执行的中间语言
JAVA速度慢 但是可以跨平台  因为java程序都是编译成中间语言  而不是针对某一种特定机器的机器语言


作者: 501392    时间: 2011-6-6 13:58:01

本帖最后由 501392 于 2011-6-6 13:58 编辑
hellbee 发表于 2011-6-6 13:43
java虽然不是第一个面向对象的,但它是面向对象里最成熟的,之后出的很多语言也都借鉴它的长处,稳重,可靠 ...

c++面向对象的功能比JAVA强得多吧   C++的多继承 > JAVA的接口
c++可以自己定义虚函数
java必须是虚函数
只是c++太灵活 难学易错而已

作者: sea    时间: 2011-6-6 13:58:51

回复 socket9999 的帖子

以前的工作辞掉了,现在正准备应聘到一家融资和资讯服务的单位,在筹备资料当中


在那里上班编程的确是可有可无的。但是毕竟编程是我的爱好了,还是会继续学下去的。

作者: XIBEIJIAN    时间: 2011-6-6 13:59:17

java一点都不慢。某些领域绝对比c++快。
作者: 501392    时间: 2011-6-6 13:59:51

本帖最后由 501392 于 2011-6-6 14:00 编辑
sololie 发表于 2011-6-6 13:51
大家都喜欢讲些自己都一知半解的东西,而且还一本正经的样子

据我看游侠做程序员工作的还挺多的

作者: zhouli520    时间: 2011-6-6 14:02:02

半吊子php路过,虽然以前学的java,补过全还给老师了
作者: andy118    时间: 2011-6-6 14:02:54

单片机设计要用C语言,没听说过用JAVA,还有很多电子电路芯片设计要用机器语言
作者: 501392    时间: 2011-6-6 14:04:28

本帖最后由 501392 于 2011-6-6 14:08 编辑
XIBEIJIAN 发表于 2011-6-6 13:59
java一点都不慢。某些领域绝对比c++快。

java无论什么时候都比c++慢   java连内存都无法自己分配
java的虚拟机就是用c++写的    java写的程序最后还是由一个c++写的虚拟机来解释执行



作者: china.gll2    时间: 2011-6-6 14:05:02

汇编可不是用不到的东西,恰恰相反、汇编连不编程的人都能用到。

比如用CE找内存基址做游戏修改器,不可避免的用到汇编、虽然不用写程序。[attach]2795581[/attach]
作者: wwt    时间: 2011-6-6 14:07:27

普通应用效率不需要多高的,又不是跑分软件,
人和电脑互动时cpu99.9%的时间都在空转。。。要那高运行效率搞毛,
缩短开发周期,提高移植性带来的收益就大得多
要你是老板你选择用什么开发?够用就好
作者: sea    时间: 2011-6-6 14:12:10

做技术的大都迷信技术,认为自己本事很大。

但是实际情况就如同前几位网友所说,我们这个社会是个商品社会,任何单位销售、运营部门是头把交椅,技术部门的地位其实很低。
作者: satan023    时间: 2011-6-6 14:13:15

大家都喜欢讲些自己都一知半解的东西,而且还一本正经的样子
作者: XIBEIJIAN    时间: 2011-6-6 14:13:25

回复 501392 的帖子

哭了,java无法分配内存。你当jvm是2么?jvm不止一种,jNode是纯java写的。

作者: 501392    时间: 2011-6-6 14:20:38

本帖最后由 501392 于 2011-6-6 14:22 编辑
XIBEIJIAN 发表于 2011-6-6 14:13
回复 501392 的帖子

哭了,java无法分配内存。你当jvm是2么?jvm不止一种,jNode是纯java写的。

jvm可以分配内存?jvm只能垃圾回收
java里面的对象全部分配在堆区
c++的对象可以分配到全局区,堆区,栈区
这才叫分配内存 行不?
java官方的JVM,IBM的JVM,Google的JVm全是用c++写的
还有人用java写了个操作系统  但是会有谁用?


作者: Squallgjs    时间: 2011-6-6 14:20:57

业余派森路过...
作者: 501392    时间: 2011-6-6 14:26:26

本帖最后由 501392 于 2011-6-6 14:30 编辑
sea 发表于 2011-6-6 14:12
做技术的大都迷信技术,认为自己本事很大。

但是实际情况就如同前几位网友所说,我们这个社会是个商品社会 ...

额 百度的李彦宏,金山的求伯君等等 都是搞技术出身
国外微软的比尔盖茨,Facebook的扎克伯格,Google的创始人也都是搞技术出身的

作者: china.gll2    时间: 2011-6-6 14:28:07

用C++只要愿意也可以自己写个垃圾回收器来用,不过那样做会失去C++的性能优势。
作者: XIBEIJIAN    时间: 2011-6-6 14:30:10

回复 501392 的帖子

基本数据类型放在栈中。

用C++写的jvm能说明什么?你以为java文件编译为.class文件之后,还要调用c语言执行么?

JVM只只能垃圾回收?jvm各种设置堆栈策略,运行模式策略和其他调优策略都被你一一无视了?

作者: china.gll2    时间: 2011-6-6 14:31:11

C/C++学的够好、水平够高,可以设计类似JAVA的新语言、开发编译器和虚拟机),反过来就不行了。
作者: 501392    时间: 2011-6-6 14:33:18

本帖最后由 501392 于 2011-6-6 14:33 编辑
XIBEIJIAN 发表于 2011-6-6 14:30
回复 501392 的帖子

基本数据类型放在栈中。

java的基本数据类型只能分配在栈中  对象只能分配在堆中  既然只有一种选择  就相当于没有选择  又何来分配之说?
我也不是说java比c++差  但是java比C++慢 那是绝对的

作者: violence    时间: 2011-6-6 14:36:27

1.c++是可以说比java快,但是没有20倍那么夸张,看你怎么写了
2.过分注重效率会增加软件开发难度,一心只盯着效率的一般都是网上那些爱装B的编程爱好者。其实现在写程序代码可读性的优先级都比效率高
作者: china.gll2    时间: 2011-6-6 14:40:35

本帖最后由 china.gll2 于 2011-6-6 14:42 编辑

C++比JAVA快是无疑问的,关键快多少,除去人的技术水平、很大程度上取决于工程大小,假设代码量在5W行到500W行之间,代码量越高C++的优势就越明显。
作者: goodboy3838    时间: 2011-6-6 14:41:58

大家都喜欢讲些自己都一知半解的东西,而且还一本正经的样子
作者: 501392    时间: 2011-6-6 14:43:57

本帖最后由 501392 于 2011-6-6 14:44 编辑
violence 发表于 2011-6-6 14:36
1.c++是可以说比java快,但是没有20倍那么夸张,看你怎么写了
2.过分注重效率会增加软件开发难度,一心只盯 ...

效率不重要?还是要看具体情况
游戏开发就不用说了  效率是重中之重
即使是网站开发
twitter因为效率问题从ruby迁移到php,java
Facebook为了提高效率专门搞了个把php转换成C++的hiphop项目

作者: china.gll2    时间: 2011-6-6 14:45:25

效率严重影响到用户体验时就不得不重视。
作者: china.gll2    时间: 2011-6-6 14:52:24

这是何等的效率,对于搜索引擎用户的忍耐极限就是1秒钟。

[attach]2795602[/attach]

作者: abc8999    时间: 2011-6-6 18:57:55

socket9999 发表于 2011-6-6 13:36
汇编语言就是是机器码的助记符……

我对于伪指令的理解错了
作者: 1263326506    时间: 2011-6-6 20:20:00

目前正在学习c++,长知识了
作者: mvp2005    时间: 2011-6-6 20:24:36

各种一知半解,本来还想参与下,现在没胃口了
作者: youxiajc    时间: 2011-6-6 20:31:28

本帖最后由 youxiajc 于 2011-6-6 20:33 编辑

不解释 能不能不滚啊

作者: 莉露.梅亞    时间: 2011-6-6 20:32:20

开发效率和执行效率,不是一回事!
作者: starcraft1980    时间: 2011-6-6 22:12:54

我更喜欢C++,JAVA比较方便,都打好包了,按个虚拟机,直接用就行了,但是执行效率确实是比c++慢一些,还是要看程序写的怎么样了。
作者: louis3698    时间: 2011-6-6 23:37:46

个人认为java的oo program比较好用
不清楚的人可以看一看什么是oo concept
作者: lanhuacao    时间: 2011-6-7 00:56:04

sololie 发表于 2011-6-6 13:51
大家都喜欢讲些自己都一知半解的东西,而且还一本正经的样子

这样可以显得自己很懂,其实他们不知道,真懂了就不说了。

作者: china.gll2    时间: 2011-6-7 01:35:01

晕,只是闲聊、又不是啥专业场合还要专家才有资格发言吗?就算在csdn和国外的codeproject、codeguru那些专业论坛也见过很多更白的提问和回答,那里气氛都很好,没见谁跳出来说风凉话、谁不是从小白过来的。[哇哈哈]
作者: YXWScan    时间: 2011-6-7 11:29:55

纯数制计算的话,c#和java的效率在c++的1.5倍左右,如果涉及一些底层调用,可能效率差距会更大。
c++标准库极为简陋,以前微软还在c++上用了点心,在微软把注意力转移到.net过后,已经很少有大公司提供通用的c++库了。由于c++基础设施的匮乏,小公司如果选择用c++做开发,很多模块仍然需要自己编写,但是这样的程序质量远逊于对应功能的jvm或clr模块。
对于游戏,桌面应用程序(比如qq、迅雷这样的常驻内存程序,性能和内存占用的要求是很高的),如果想要做到一流,用c++甚至c语言,是必须的。往理想了说,用java做的游戏是30帧的话,用c++能够提高到60帧,这一倍的性能差距给用户的体验是完全不同的。做游戏上,其实微软早就推出了managed directx和xna等技术,只要不是做大型游戏,性能上完全不是问题。
对于企业应用和网页等,他们或者并没有极为苛刻的性能需求,或者要求高度并发,或者追求极端的稳定性,出于这些原因可能java是更适合的。另外的java有几十年来积累的标准库,作为托管代码无内存泄漏和越界访问之忧,java本身的开源和庞大的开源社区,这些都是选择java的理由。
太多中小企业在部分应用上选择java或者c#甚至脚本语言。优秀的c++程序员太难找,培养周期过长。大部分的项目,java和c#能够给他们提供大量的通用模块极大的缩短开发周期和提高稳定性。
我的经验,除非满足以下任意情况(暂时想到的),否则选用c++往往不是最优的:1.项目成员都是c++高手,具备扎实的功底和经验。微软和谷歌就是例子,由于他们是底层供应商,所有的模块都敢于用c++编写。2.项目较小,整个开发周期内,参与的成员在10人以内。在国内两三个人给小公司做项目很常见。3.软件有极高的性能需求。对于游戏这种一跑起来cpu就100%(关闭垂直同步)的软件,甭管项目成员c++水平如何,赶鸭子上架也得用c++(游戏领域c++搭配lua是很常见的,前者做引擎,后者做业务)。
我上面讨论的主要还是windows下的情况。
关于性能,java和c#在标准库的层次有完备的多线程支持,更易于编写并发程序,更能利用多核优势,c++在这方面相对困难些。对于已经编写完成的软件,c++程序随着硬件的进步能够运行的更快,但由于c++多线程无错程序的编写困难和cpu朝着多核的方向发展,这种免费午餐已经越来越难得了。而java和c#,由于项目代码之下还有一层虚拟机,抽象层次更高,编写好的java程序除了能够通过硬件进步得到福利,虚拟机的不停优化也能让程序运行的更快。
总之存在即是合理的,近10年来java在tiobe编程语言排行上一直雄踞3甲,最近更是把c++甩开很多,更多的项目使用java比c++更合适。
一个新项目,根据需求选择适合的语言和技术进行开发,远比不考虑需求一味用c++蛮干来的要好。对专业程序员来说,学习新语言相对是很容易的,技术业务才是重心。
作者: 8848cjf    时间: 2011-6-7 12:21:36

没想到游侠也看到讨论编程语言的帖子。我用java开发1年多了,但对jvm都还不怎么了解。。。也许像ls那位说的,其实现在搞编程在业务方面下的功夫会更多。
作者: tao517456321    时间: 2011-6-7 14:49:02

简单的来说,以现在的cpu速度,那些时间已经可以忽略不计了




欢迎光临 游侠NETSHOW论坛 (https://game.ali213.net/) Powered by Discuz! X2