Scala和Java在多核处理性能的一次对比和思考

今天在网络上看到了一篇关于Scalajava多线程对比的文章《Simple Scala actor Vs java Thread Vs Kilim Test原文链接:http://www.blogjava.net/BlueDavy/archive/2009/11/25/303662.html》,乍看起来似乎是证明了Scala在多核处理性能上要强于Java,但经过我的分析和测试,发现结果并不靠谱。

 

这篇文章的作者知识面挺广的,写了3个版本的性能对比代码,并且得出了Scala在多核处理性能上要强于Java。但我要说的是这篇文章所得到的测试结果很不客观,因为里面所用的数据结构和算法有很大问题。

 

问题一,1000次循环里,居然拿java里面的ArrayListScala里面的数组比对性能,这是很致命的失误。从理论和实际情况看,数组本来就比ArrayList性能强很多倍。

 

问题二,scala版本的1000次循环居然使用性能很烂的for循环,而不是性能更好的while,真是无语呀。

问题三,1000次循环里,java版本里很耗时的一个动作是 String.valueOf(i);看起来和Scala版本里面的i.toString相似,但实际上,这两种语言里面的内部实现是不同的。尤其是java版本里面的String.valueOf(i),产生了过多的对象,性能并不好。为了公平起见, java版本里把String.valueOf(i);直接用直接用字符串”1”替换,Scala版本里面也直接字符串”1”替换i.toString,测试结果是java版本和Scala版本所运行的时间是基本相同的。此外,更好玩的是,一旦把java里面的ArrayList数据结构换成数组,测试的结果是java版本的运行时间比Scala版本要快一倍。

 

今天为这个测试折腾了半天时间,得出的结论是:在做各种语言性能对比的时候,一定要充分了解你所使用的数据结构和算法,一定要客观评估自己所采用的算法和数据结构对测试结果的影响。否则,得到结果很可能是南辕北辙。

转载于:https://my.oschina.net/qinhui99/blog/57241

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值