Tej*_*eni 16 performance scala
该问题实际上说明了一切.
这个问题背后的原因是我即将开始一个小型项目,并希望这样做Scala.我在过去的一个月里学习scala,现在我很乐意使用它.scala编译器本身很慢(除非你使用fsc).那么它在JVM上的表现如何呢?我之前曾在groovy工作过,而且我看到有时候比java更有表现力.我的问题是与Java相比,scala在JVM上的表现如何.我知道scala有一些非常好的功能(FP,动态朗,静态类型......)但是当天我们需要性能......
Rex*_*err 25
我的大部分工作都使用Scala作为高性能语言.如果一个人真的非常注意性能,那么Scala几乎总是和Java一样好(如果不是等价的话).如果一个人不注意例如对象创建,它可能会更糟糕 - 如果你使用一个不关心对象创建的库,它可以在Java中.(事实上,我的Scala代码通常比我的Java代码更快,因为我发现使高度优化的代码更容易使用和重用 - 但如果我有更多的时间和时间,Java会更快或更快忍耐.)
如果您想要一些数据证明Scala基本上与Java一样快,请查看计算机语言基准测试游戏中的结果.(对于高吞吐量多核编程而言,另一个不太有用但仍然有趣的比较是Tim Bray的Wide Finder 2.由于算法没有提前定义,因此不太有用,因此很大一部分差异归结为算法的差异.)
les*_*es2 14
Scala被编译为字节代码并且是静态类型的,因此可以为Java等静态类型语言(与Groovy等动态类型语言相对)完成许多相同的优化.因此,将Groovy与Scala进行比较是将苹果与橙子进行比较.
现在,Java与Scala比较:
在大多数情况下,您可以预期Scala与Java相同.如果你愚蠢地编写Scala,Scala可能会很慢,例如,通过Traits混合的音调可能会提供普通Java不具备的一些开销.
但......
如果Traits实际上正在解决一个复杂的问题,那么普通Java中的解决方案就必须解决同样的复杂问题.谁能说你使用自己的模式在Java中编写的解决方案比在Scala中免费获得的更有效(请记住,Scala编译器是由那些可能比你更好的程序员编写的).
另一方面,如果你没有充分的理由使用语言功能(例如,普通的int原语就可以使用Integer对象),无论你使用哪种语言,你的代码都会变得臃肿,缓慢,垃圾.
此外,请考虑与数据库或其他I/O密集型资源交互的特殊类型的基于请求 - 响应的应用程序.瓶颈不会是"新"运算符或虚拟方法调用开销 - 它几乎肯定是I/O.
总之,Scala和Java之间的性能大致相同,并且不应该是99%的情况下您选择其中一个的最大原因.由于熟练的人力劳动比计算机硬件更昂贵,因此最好选择能够(或可以学习)最有效地编程的语言(包括你的队友).如果Scala允许您将代码的十分之一写为Java,那么使用它可能会获得10倍的好处.如果Scala减慢你10次(因为它太难阅读),坚持使用Java!
我同意Rex在这篇文章中的评论,我有个人经验来支持它.我将Processing applet从java转换为scala,而不更改任何实现细节,并且这两个applet在~6ms内渲染了一个框架,几乎没有变化.