我一直在想这个问题。请提供定量数据以支持您的答案。
相关:Windows,Mac和Linux JVM性能之间是否存在显着差异?
答案 0 :(得分:12)
Shudo has done comparisons并发布了像linpack,Scimark等微基准测试的源代码。
linpack的示例结果:
(来源:shudo.net)
但最后一次更新是在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怎么样?如果交易的关键部分是加密或数字签名创建和验证怎么办?这些基准测试不会告诉您有关其他方案的任何信息。因此,您可以将它们称为微基准测试。
您需要一个能够正确模拟您要评估的内容的基准。
答案 1 :(得分:4)
结帐The Computer Language Shootout。他们比较了许多语言和虚拟机,包括Mono and JVM。
答案 2 :(得分:3)
如果您正在查看桌面上的启动速度,内存和CPU利用率,this可能有所帮助,因为它使用的是截至2010年7月的最新版本