bun*_*ine 38 .net java performance benchmarking jvm
你有没有必要证明选择使用.NET而不是基于性能的Java?
对于可以执行以下操作的典型高容量事务处理系统,
我的方法是在Java中为JVM和C#for .NET CLR编写基准测试,在不同负载水平下对上述操作进行基准测试并比较结果.
除了语言和平台偏好之外,我有兴趣了解如何在Java VM和.NET CLR之间进行结论性的性能比较?
是否存在任何全面且受尊重的基准?
Jul*_*anR 35
我没有关于JVM与CLR效率的确切数字,但差异(如果有的话)可能很小.
但是,在语言方面,C#确实有一些比Java更低级的构造,这将允许更多的优化.
构造如:
用户定义的值类型.快速分配,没有内存开销(如果我没记错的话,CLR和JVM中每个引用类型为12个字节).对于让自己自然地表达为值的东西很有用,比如矢量和矩阵.所以数学运算.将此结合使用ref
并out
避免过度复制这些大值类型.
不安全的代码块,允许更接近"金属"优化.例如,虽然CLR和JVM在某些情况下可以避免数组边界检查,但在很多情况下,它们不能并且每个数组访问都需要检查索引是否仍然在数组的范围内.在这里使用不安全代码允许您直接使用指针访问数组的内存并绕过任何边界检查.这可能意味着节省大量资金.在非常低级别,还有stackalloc
允许您直接在堆栈上分配数组,而在堆上分配正常数组,这更慢,但也更方便.我个人不知道任何实际应用stackalloc
.
真正的泛型,不像Java的类型擦除泛型,避免不必要的铸造和装箱.但是,如果这是Java程序中的问题,可以通过一些额外的工作轻松解决(例如从ArrayList<Integer>
内部使用int[]
缓冲区转换为自定义类型).
这一切似乎都偏向于C#,我认为C#有更好的低级语言结构,可以帮助提高性能.但是,我怀疑这些差异真的很重要(并且它们甚至可能不适用于你的情况,如果所有你做的只是数据库访问,Java可能会更快),如果选择以某种其他方式阻碍你(如去跨平台).寻求正确性,符合您要求的平台,而不是轻微的性能差异.
归档时间: |
|
查看次数: |
33087 次 |
最近记录: |