当前位置:  开发笔记 > 编程语言 > 正文

.NET/Mono性能与JVM相比如何?

如何解决《.NET/Mono性能与JVM相比如何?》经验,为你挑选了1个好方法。

我一直在想这个问题.请提供定量数据以支持您的答案.

相关:Windows,Mac和Linux JVM性能之间是否存在显着差异?



1> Cheeso..:

Shudo已经完成了比较并发布了像linpack,Scimark等微基准测试的源代码.

linpack的样本结果:

alt text http://www.shudo.net/jit/perf/Linpack-500-P4.png

但最近的更新是在5年多前 - 显然使用的是.NET V1.0或v1.1,而且主要使用的是JVM v1.4.这意味着它在Java和.NET上都有几个过时的版本.您可以获取源并生成自己的结果.


我刚刚这样做了 - 下载了linpack.java和linpack.cs,编译并运行它们.我使用了Sun的Java v1.6.0.11和Microsoft的C#3.0(3.5编译器).两者都在Windows Vista上.

对于linpack问题大小为2000,Java版本为17.6s,C#版本为17.78s.

然后我再次运行它,Java获得18.14s,C#获得17.31.


你在测量什么?

这说明了性能测量和测试中的一些挑战.

第一:
单一试验不足以得出有意义的结论.通常你应该测量很多试验,然后平均结果.

第二:
你在测量什么?如果您运行单个试验来解决单个问题,那么启动流程的成本将包括在时间,JIT时间以及填充任何缓冲区的任何成本中.这可能是您真正想要衡量的,也可能不是.

在许多情况下,它是您要测量的稳态性能.例如,在服务器进程中,您启动它一次并运行数月.因此,启动成本可以忽略不计,您希望测量和优化的是请求吞吐量给定最小平均响应时间.或者在"胖客户端"中,您想要的是进行视频处理所需的时间,而您不想测量流程启动成本.

第三:
工作量是多少?如果你做了很多浮点数学运算,Linpack和Scimark可能会很有趣.但是如果你不这样做呢?如果您执行大量XML碎化,字符串解析,整数数学,数据库交互或HTML页面生成,该怎么办?如果您的代码执行大量线程管理或使用线程同步原语,该怎么办?通信和IO怎么样?如果交易的关键部分是加密或数字签名创建和验证怎么办?这些基准测试不会告诉您有关其他方案的任何信息.因此,您可以将它们称为微基准测试.

您需要一个能够正确建模您要评估的内容的基准.


另请参阅:
作为语言基准的琐碎数学问题


"你需要一个能够正确模拟你想要评估的基准的基准." 又名"你的应用程序是最终的基准"http://shootout.alioth.debian.org/u32/miscfile.php?file=benchmarking&title=Flawed%20Benchmarks#app
推荐阅读
携手相约幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有