LinuxSir.Org  
| 网站首页 | 论坛帮助 |

欢迎来到LinuxSir.Org!
您还未登录,请登录后查看论坛,或者点击论坛上方的注册链接注册新账号。


发表新主题 回复
 
主题工具
旧 08-01-30, 11:34 第 1 帖
yuzheng
 
 
 
注册会员  
  注册日期: May 2003
  我的住址: 北京
  帖子: 125
  精华: 0
 

标题: java的速度比c++慢多少?


我有一个纯算法的程序,现在是用java写的,基本只使用java的输入和输出,现在运行需要1小时,不知道用c++重写之后性能是否会有很大的提升。谁有这方面的经验,交流交流。
  yuzheng 当前离线   回复时引用此帖
旧 08-01-30, 16:14 第 2 帖
xcity
 
 
 
注册会员  
  注册日期: Feb 2004
  帖子: 132
  精华: 1
 

就速度而言,java在loading的时候比较的慢,主要是因为java的字节码没有完成link的过程,所以在加载的时候,需要做link。这也是为什么java的客户端程序启动都比较慢的原因。但是完全运行起来之后,java的速度并不慢,并且由于java能够动态的利用处理器的扩展api,所以,在默写情况下java的速度甚至可以比c++要快。

每个语言都有一个使用的范围,如果你并不关心加载的速度,那么java很适合你,如果你关心加载的速度,c++更加适合。运行起来之后,速度的区别主要是算法的复杂度,和用c++和java没有太大区别。







__________________
---------------------------------------
Linux is not a toy, It did get work done!
  xcity 当前离线   回复时引用此帖
旧 08-01-31, 09:08 第 3 帖
gamedragon
 
gamedragon 的头像
 
 
注册会员  
  注册日期: Mar 2004
  帖子: 568
  精华: 0
 

引用:
作者: xcity
并且由于java能够动态的利用处理器的扩展api,所以,在默写情况下java的速度甚至可以比c++要快。
这种情况说明这个C++的程序写的不好。
  gamedragon 当前离线   回复时引用此帖
旧 08-02-01, 15:46 第 4 帖
yuzheng
 
 
 
注册会员  
  注册日期: May 2003
  我的住址: 北京
  帖子: 125
  精华: 0
 

我已经试了一下,java和c++的运行时间之比是 266:230,当然java的是不包括加载的时间。看来可以安心的用java继续写下去了。但是有一个很奇怪的问题,既然java的速度已经接近c++,网上还有那么多人用c++作数值计算能?我选java是因为它的安全性,数组在运行时越界了就会报错,想当初调试c++程序那个痛苦,改为等价的java代码之后运行就保存,数组越界了。
  yuzheng 当前离线   回复时引用此帖
旧 08-02-01, 15:47 第 5 帖
yuzheng
 
 
 
注册会员  
  注册日期: May 2003
  我的住址: 北京
  帖子: 125
  精华: 0
 

改为等价的java代码之后运行就出错,数组越界了
  yuzheng 当前离线   回复时引用此帖
旧 08-02-05, 13:45 第 6 帖
mikeandmore 帅哥
 
 
 
注册会员  
  注册日期: Jul 2005
  帖子: 527
  精华: 1
 

引用:
作者: gamedragon
这种情况说明这个C++的程序写的不好。
或者是编译优化没有开完全。。。







__________________
从今天开始,做个纯洁的孩子
  mikeandmore 当前离线   回复时引用此帖
旧 08-02-05, 13:47 第 7 帖
mikeandmore 帅哥
 
 
 
注册会员  
  注册日期: Jul 2005
  帖子: 527
  精华: 1
 

引用:
作者: yuzheng
我已经试了一下,java和c++的运行时间之比是 266:230,当然java的是不包括加载的时间。看来可以安心的用java继续写下去了。但是有一个很奇怪的问题,既然java的速度已经接近c++,网上还有那么多人用c++作数值计算能?我选java是因为它的安全性,数组在运行时越界了就会报错,想当初调试c++程序那个痛苦,改为等价的java代码之后运行就保存,数组越界了。
因为jvm loading的时间不爽。。。。
java语言本身还是很不错的。。。
至于数组越界这种所谓的安全性。。。。。忽略。。。。。太囧了。。。
  mikeandmore 当前离线   回复时引用此帖
旧 08-02-19, 12:13 第 8 帖
基督山伯爵
 
基督山伯爵 的头像
 
 
注册会员  
  注册日期: Mar 2003
  帖子: 511
  精华: 0
 

整个一个月经贴。不予理会。
  基督山伯爵 当前离线   回复时引用此帖
旧 08-02-20, 18:55 第 9 帖
luoyong 帅哥
 
luoyong 的头像
 
 
★版主☆  
  注册日期: May 2003
  帖子: 734
  精华: 3
 

引用:
作者: yuzheng
我已经试了一下,java和c++的运行时间之比是 266:230,当然java的是不包括加载的时间。看来可以安心的用java继续写下去了。但是有一个很奇怪的问题,既然java的速度已经接近c++,网上还有那么多人用c++作数值计算能?我选java是因为它的安全性,数组在运行时越界了就会报错,想当初调试c++程序那个痛苦,改为等价的java代码之后运行就保存,数组越界了。
因为C++的现成代码多,有得可抄。







__________________
Blog: http://www.pixel-white.com

Source Repo: http://github.com/Iacob
  luoyong 当前离线   回复时引用此帖
旧 08-03-20, 18:39 第 10 帖
OneZ
 
OneZ 的头像
 
 
注册会员  
  注册日期: Apr 2003
  我的住址: 盐城
  帖子: 115
  精华: 0
 

纯算法,还是C比较快。
  OneZ 当前离线   回复时引用此帖
旧 08-03-21, 20:16 第 11 帖
manphiz
 
manphiz 的头像
 
 
注册会员  
  注册日期: Aug 2004
  帖子: 1,153
  精华: 3
 

引用:
作者: yuzheng
我已经试了一下,java和c++的运行时间之比是 266:230,当然java的是不包括加载的时间。看来可以安心的用java继续写下去了。但是有一个很奇怪的问题,既然java的速度已经接近c++,网上还有那么多人用c++作数值计算能?我选java是因为它的安全性,数组在运行时越界了就会报错,想当初调试c++程序那个痛苦,改为等价的java代码之后运行就保存,数组越界了。
你需要重新学习下 STL : STL 容器有个 at() 方法,越界的时候会抛异常。







__________________
为了本本的CPU,回归 debian ...
  manphiz 当前离线   回复时引用此帖
旧 08-03-22, 16:30 第 12 帖
fearee
 
fearee 的头像
 
 
注册会员  
  注册日期: Feb 2005
  帖子: 78
  精华: 0
 

c++里面可以内联和嵌入汇编,还可以把一些函数声明为从寄存器获得参数,省略参数的压栈,恢复栈,性能的话c++和java确实没法比的
  fearee 当前离线   回复时引用此帖
旧 08-05-04, 16:47 第 13 帖
moonjava
 
 
 
注册会员  
  注册日期: Jul 2007
  帖子: 173
  精华: 0
 

引用:
作者: xcity
就速度而言,java在loading的时候比较的慢,主要是因为java的字节码没有完成link的过程,所以在加载的时候,需要做link。这也是为什么java的客户端程序启动都比较慢的原因。但是完全运行起来之后,java的速度并不慢,并且由于java能够动态的利用处理器的扩展api,所以,在默写情况下java的速度甚至可以比c++要快。

每个语言都有一个使用的范围,如果你并不关心加载的速度,那么java很适合你,如果你关心加载的速度,c++更加适合。运行起来之后,速度的区别主要是算法的复杂度,和用c++和java没有太大区别。
说得太对了!
  moonjava 当前离线   回复时引用此帖
旧 08-05-05, 21:38 第 14 帖
qianzheng82
 
qianzheng82 的头像
 
 
注册会员  
  注册日期: Jan 2003
  我的住址: 上海
  帖子: 454
  精华: 5
 

如果做企业级应用的程序,用 java 是比较好,一方面它门槛低,另一方面它的开发效率比 C++ 高。但如果做系统级程序,还是用 C/C++ 较好。







__________________
Abit-KV7/AMD-Athlon2500+/Kingston-512M-DDR400 x 2
6800XT/WD-2500JD/WD-1200BB/SAMSUNG 910T/LiteOn 1653 DVDRW
  qianzheng82 当前离线   回复时引用此帖
旧 08-05-22, 13:16 第 15 帖
arli 帅哥
 
arli 的头像
 
 
注册会员  
  注册日期: Sep 2003
  我的住址: 乡8佬
  帖子: 239
  精华: 0
 

为了实现 地址引用 跟 符号byte 问题,就得多费周章,而C差不多是天生的无视这些(对于算法,指针是重中之重!)
为了实现 汇编 能力,更要中转几层,而C差不多也是天生无视

在基本运算效能利用率上,没有哪种PC上的编程语言能跟C比的。。这是不容置疑的。
在可移植性,开发周期,部署难度等方面,还没有能跟java比的,实为大型项目的首选方案

故而应当考虑的是因时因势而决。。单纯算法,首推C,要java跟上它的效能利用率,除非未涉及到数组扩容、地址引用参数要求,符号等许多问题,只简单的& >> +-/* 这类的计算应该不成问题

最重要的一点是,你喜欢用哪个就用哪个,不必费心找借口,Microsoft 今天都推广了 .net framework,你认为20年前的mov add这样的汇编在算法效率上比它差么,那为什么 bill gates 这么笨哩。。
  arli 当前离线   回复时引用此帖
发表新主题 回复


主题工具

发帖规则
您 [不可以] 发表新主题
您 [不可以] 回复主题
您 [不可以] 上传附件
您 [不可以] 编辑您的帖子

已 [启用] BB 代码
已 [启用] 表情符号
已 [启用] IMG 代码
已 [禁用] HTML 代码
[论坛跳转…]


所有时间均为[北京时间]。现在的时间是 07:34


Powered by vBulletin 版本 3.6.8
版权所有 ©2000 - 2012, Jelsoft Enterprises Ltd.
官方中文技术支持: vBulletin 中文
版权所有 ©2002 - 2011, LinuxSir.Org