Web上充满了不同语言,编译器和虚拟机的各种性能测试。然而,几乎没有任何一个使用一些真实场景来测试性能。此外,在Google上搜索这类基准测试通常只会产生几年前的基准测试,因为他们有最多的时间收集链接。
您是否真的了解不同虚拟机的当前性能?此外,我特别想知道Mono的性能与微软的.Net和Sun的Java相比如何,以及不同虚拟机的性能最近如何发展。
答案 0 :(得分:12)
衡量绩效是一件复杂的事情。过去,当语言针对同一操作系统进行测试时,运行相同的硬件和非常有限的库集,可以创建可以提供测量系统的线性度量的基准。它会让人们从0到10评估事物,同化结果并快速进入下一个主题。
现代系统的情况变得更加复杂,因为需要考虑多个变量。
至少在Mono的情况下,有很多变量可以发挥作用:
代码:
内存管理:
API设计:
所有这些事情都非常复杂,并且很难给出简单的0到10答案。
如果您要在课程中对语言进行分区,并且您认为有能力且具有绩效意识的程序员,我会在这些课程中划分世界:
但是这些语言并没有描绘出整个画面,您将使用的API,托管操作系统和其他设施将对您的结果产生重大影响。
例如,最近在Mono中,我们增加了对使用更高级,高度优化的引擎(LLVM引擎)替换Mono代码引擎的支持。事实证明,找到一个使用LLVM的开销值得额外内存使用的测试非常困难:桌面和Web应用程序没有表现出太大差异。这可能是因为这些主要是受I / O限制的应用程序。
使用LLVM对于科学和计算密集型应用程序非常有用,但在现实生活中它与Mono的默认优化设置没有多大区别。
至于Mono的细节:尽管Mono确实使用了Boehm的GC,但大多数人都没有意识到Boehm可以通过各种方式进行配置。默认的外行配置确实不是很强大,但它适用于想要快速GC的每个人。 Mono在这种模式下不使用Boehm,Mono广泛配置Boehm以在精确模式下工作,同时利用线程本地存储,多核GC和释放内存到操作系统模式。
答案 1 :(得分:2)
要比较Java和Mono,您可以查看The Computer Language Benchmarks Game。
答案 2 :(得分:1)
虽然我没有使用过Mono,但我想这取决于你用它做什么。我无法给出关于事物的确切数字,但这是关于Mono浮点性能的一个有趣的消息:
http://forums.xna.com/forums/p/24249/24249.aspx
由于Mono允许使用你的CPU的SIMD指令(我相信SSE2和SSE4)可以大大加速浮点计算,它可以在这种情况下吹掉.NET(速度提高10倍),正如图表所示(并希望微软很快会实现类似的东西,请使用.NET 4.5)。但是,该图表还显示,在不使用Mono.Simd时,.NET仍然比Mono快得多。并且你可以实现信仰的巨大飞跃,并将浮点性能的20%差异推断到其他领域,比如字符串性能。
然而,这就是Mono 2.2,因为现在Mono的移动非常快,所以事情可能会发生巨大的变化,或者我听说。
答案 3 :(得分:1)
今年早些时候使用benchmarked的SciMark2 Mono 2.0和2.2,发现Mono的性能略有提升,但仍远低于大多数其他VM。
答案 4 :(得分:0)
我知道这已经过时了,但我刚刚发现它并且当前的答案(甚至是米格尔)都没有解决你问题中的一个根本缺陷:虚拟机。
你似乎在这一点上被误导了。 .Net不使用VM,也不使用单声道。确实.Net使用运行时库,并且代码确实编译为IL以进行类似于Java的字节码的部署。但是,运行时不是虚拟机。不同之处在于,在部署之后,IL本身在执行之前完全编译为本机机器代码。无需虚拟机。