Java VM vs .NET CLR的基准testing性能

你有没有必要certificateselect使用.NET而不是基于性能的Java?

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

  • 并发数据库事务
  • math计算
  • 与其他Web服务交互(SOAP / XML,XML-RPC)

我的方法是在JVM和.NET CLR的C#中都使用Java编写基准testing,并在不同负载水平下对上述操作进行基准testing,并比较结果。

除了语言和平台偏好之外, 我有兴趣了解如何在Java VM和.NET CLR之间做出决定性的性能比较

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

我没有JVM与CLR的效率确切的数字,但是如果有的话,差异可能很小。

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

构造如:

  • 用户定义的值types。 快速分配,没有内存开销(如果我没有记错的话,在CLR和JVM中每个引用types都是12个字节)。 有用的东西,让自己自然地expression为价值观,如向量和matrix。 所以math运算。 将这与refout结合起来out以避免过度复制这些大的值types。

  • 不安全的代码块允许多一点“接近金属”的优化。 例如,虽然CLR和JVM在某些情况下可以避免数组边界检查,但是在很多情况下,它们不能和每个数组访问都需要检查索引是否仍然在数组的范围内。 在这里使用不安全的代码允许你直接用指针访问数组的内存,并绕过任何边界检查。 这可能意味着重大的节约。 而在非常低层面上,还有stackalloc允许你直接在栈上分配数组,而在堆上分配一个正常的数组,这比较慢,但也更方便。 我个人不知道stackalloc任何实际应用。

  • 真正的generics,不像Java的types擦除generics,避免了不必要的投射和装箱。 但是,如果这是Java程序中的问题,那么可以通过一些额外的工作(例如从ArrayList<Integer>切换到内部使用int[]缓冲区的自定义types)轻松解决。

这一切似乎偏向于C#,我认为C#有更好的低级语言结构可用,可以帮助性能。 然而,我怀疑这些差异是否真的很重要(如果你select阻止你的方式,你可能甚至不会使用指针,如果你所做的只是数据库访问,那么Java可能会更快)跨平台)。 去找正确的,符合你的要求的平台,而不是轻微的性能差异。

Java VM和.Net CLR之间的最终性能比较是一个梦想。 因为devise一个复杂的系统往往涉及妥协,所以你总是可以进行一次性能testing,使其看起来比另一个更好。 如果你把基准的types缩小到运行速度和内存,你可能会发现这样的文章: http : //www.codeproject.com/KB/dotnet/RuntimePerformance.aspx这绝不是辩论的结束。

除了语言和平台偏好之外,我有兴趣了解如何进行Java VM和.Net CLR之间的最终性能比较?

我将编写一套基准testing,旨在比较两个虚拟机及其标准库的各种不同特性。 我的专长是技术计算,所以我会build议如下:

  • 在寄存器整数运算中,例如斐波那契。
  • 在寄存器浮点运算中,例如mandelbrot。
  • 数组迭代,例如FFT。
  • 分配,例如纯粹function性的红黑树。
  • 带有int或float键和值的哈希表。
  • 散列表与string键和值。
  • string。
  • 常用expression。
  • 文件IO。

也许你可以拿出类似的数据库和Web服务。

不要忘记,坐在CLR之上的语言具有完全不同的属性。 例如,使用F#语言inline ,可以自动优化,从而可以在C#上获得巨大的性能提升。 相反,C#中的goto可以让你在F#中更有效地做一些事情,并且C#中结构的优化比F#更有效(上次我看了)。

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

不,但有很多分散的基准,关注exception值,因为它们更有趣。 例如, 这篇博客文章描述了为什么一个简单的通用哈希表基准在.NET上的F#比在JVM上的Java快17倍。 在这种情况下,原因在于值types和泛化generics使得可以在.NET上编写比在JVM上更高效的通用哈希表实现。

是的,这是一个非常全面的基准游戏,可以让你比较许多不同的东西。

http://shootout.alioth.debian.org/

唯一的是它使用单声道而不是视觉工作室,但两者之间的性能差异现在非常小。

一般来说,java通常稍微快一点(取决于你在做什么),但是使用更大的内存占用量,并且它们都是大致相同的源代码大小。

我也想知道哪一个会有更好的performance。 但不知道如何去执行这个基准testing。

这么好的问题 – 希望我们都会在这里得到一些指导。

我想这个基准testing将需要一个“折扣”的基准testing方法(易于设置和由1名开发人员运行)?

我有任何人有这样的信息,这将是伟大的。 我经常被要求在短时间内自行评估技术。

不错的一个bunn_online!

仅供参考,您不能使用.NET框架代码进行任何forms的基准testing,而无需先与Microsoft联系并获得批准。

如果你确实想发表一些我以为我会让你知道的东西。

从内存MS做了一些书店,Java做的第一个炫耀他们的软件可以更有效地工作在同一个任务的宠物店东西。 我在想它。

.NET宠物商店

基准…你可以用testing来certificate几乎所有的东西,满足你的需求。
除了Chuck Norris。 查克·诺里斯(Chuck Norris)如果他这样select的话,他会比X慢得多又快。

还有一点。 假设您得出Java更快的结论。 这是否意味着从现在起两年还会更快?

如果Java的速度提高了5%,而.NET的工作容易10%,那么你会select什么?
有许多因素,performance只是其中之一。 如果差异很小(我认为是这样),这可能不是最重要的一个。

除非你正在构build非常关键性能的东西。