首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java与.NET CLR的基准测试性能

Java与.NET CLR的基准测试性能
EN

Stack Overflow用户
提问于 2009-07-10 08:21:24
回答 7查看 35K关注 0票数 36

您是否有必要根据性能而选择使用.NET而不是Java呢?

对于可以执行以下操作的典型的大容量事务处理系统,

  • 并发数据库事务
  • 数学计算
  • 与其他web服务(SOAP/XML、XML)的交互

我的方法是用Java为JVM编写基准测试,为C#编写.NET的基准测试,在不同的负载级别下对上述操作进行基准测试,并比较结果。

撇开语言和平台首选项不说,--我想听听您将如何在Java和Java之间做一个决定性的性能比较?

是否存在任何全面和受尊重的基准?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2009-07-10 17:31:10

对于JVM和CLR的效率,我没有确切的数字,但如果有差别,可能会很小。

然而,在语言方面,C#确实有一些比Java更低的构造,这将允许更多的优化。

构造,如:

  • 用户定义的值类型。分配速度快,没有内存开销(如果我没记错的话,CLR和JVM中的每个引用类型都是12字节)。对于让自己自然地被表达为值的东西有用,比如向量和矩阵。所以数学运算。将其与refout结合起来,以避免过度复制这些大值类型。
  • 不安全的代码块,允许更多的“接近金属”优化。例如,虽然CLR和JVM在某些情况下可以避免数组边界检查,但在许多情况下,它们不能这样做,而且每次数组访问都需要检查索引是否仍然在数组的范围内。使用这里的不安全代码,您可以使用指针直接访问数组的内存,并绕过任何边界检查。这可能意味着一个重大的节省。在非常低的层次上,还有stackalloc,它允许您直接在堆栈上分配数组,而在堆上分配一个普通的数组,这样做更慢,但也更方便。我个人不知道stackalloc的任何实际应用。
  • 真正的泛型,与Java的类型擦除泛型不同,避免了不必要的转换和装箱。但是,如果这是Java程序中的一个问题,可以通过一些额外的工作(例如,从ArrayList<Integer>切换到内部使用int[]缓冲区的自定义类型)就可以很容易地解决。

这一切似乎都倾向于C#,我确实认为C#有更好的低级别语言结构,可以帮助提高性能。但是,我怀疑这些差异真的很重要(在您的情况下,它们甚至不适用,如果您所做的只是数据库访问( Java可能更快),那么使用指针对您没有任何好处),如果选择以其他方式阻碍您(比如跨平台)。追求正确性,即与您的需求相匹配的平台,而不是细微的性能差异。

票数 34
EN

Stack Overflow用户

发布于 2010-07-09 15:52:09

是Java和.Net CLR之间的决定性性能比较,这是一个白日梦。您总是可以进行性能测试,使其中一个看起来比另一个更好,因为工程一个复杂的系统总是涉及妥协。如果将基准测试的类型缩小到运行时速度和内存,您可能会发现这样的文章:http://www.codeproject.com/KB/dotnet/RuntimePerformance.aspx,这绝不是争论的结束。

票数 3
EN

Stack Overflow用户

发布于 2012-04-25 09:27:31

撇开语言和平台首选项不说,我想听听您将如何在Java和.Net CLR之间做一个决定性的性能比较?

我将编写一套基准测试,让您比较这两个VM及其标准库的不同特性。我的专长是技术计算,因此我建议如下:

  • 在寄存器整数算法中,例如Fibonacci。
  • 在寄存器浮点算法中,例如mandelbrot。
  • 数组迭代,例如FFT。
  • 分配,例如纯功能的红黑树。
  • 带有int或浮动键和值的哈希表。
  • 带有字符串键和值的哈希表。
  • 弦乐。
  • 正则表达式
  • 文件IO。

也许您可以为数据库和web服务提供类似的东西。

不要忘记,位于CLR之上的语言具有非常不同的属性。例如,inline在F#语言中允许您自动化优化,这些优化可以比C#获得巨大的性能提升。相反,goto in C#使您能够比在F#中更有效地完成一些事情,并且在C#中对结构的优化比在F#中更有效(我上次看过)。

是否存在任何全面和受尊重的基准?

没有,但是有许多零散的基准集中在异常值上,因为它们更有趣。例如,这篇博客文章描述了为什么简单的通用哈希表基准测试在F# on .NET上比在.NET上的Java中快17×10。在这种情况下,原因是值类型和具体化泛型使得在.NET上编写比在JVM上高效得多的通用哈希表实现成为可能。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1108358

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档