与Java相比,Groovy的性能如何?

Groovy与Java相比的性能如何?

Groovy被编译为JVM显然是正确的。 然而这与performance无关。

这里最重要的是Groovy是一种dynamic语言。 这基本上意味着Groovy编译器大部分时间几乎不知道它正在调用方法/从中检索属性的对象的types。 这对性能有很大的影响。 可能有数千个不同的类实现了不具有公共基类的someFancyMethodName()。 然而,调用obj.someFancyMethodName()必须select正确的。 基于某种反思,在运行时决定它还没有更好的方法。 实际上,因为这样,通过对对象元类的invokeMethod()的调用,每个对方法的调用都会被调度。 如果你的程序抛出了一些讨厌的exception,这在stacktraces中是非常明显的。 更糟的是 groovy中的任何类都可以selectdynamic地提供给定名称的方法的实现,即在运行时生成它们。 有相当数量的Grails魔法可以大量使用它。 当方法重载起作用时,会出现另一个复杂情况。 由于types的知识是如此有限,所以在编译时不可能select正确的方法版本。 生成的代码必须查看提供的对象,然后通过使一系列if-elseselect最适合提供的调用的实现。 这大部分时间是一个非常平凡的过程,从来没有打算在运行时执行。 然而,Groovy必须这样做才能保持与Java的互操作性。

所有这使Groovy变得非常缓慢。 事实上,比起大多数dynamic语言(例如Python)来,速度要慢得多,而且更痛苦,更耗费内存。

也就是说,我同意使用Groovy的原因当然不是性能。 大多数情况下,最终只会优化一小部分代码。 如果性能是这样一个问题,你总是可以采用纯Java来重写那些特定的部分,或者试试Groovy ++。 还没有尝试过,但是我在线阅读的结果看起来很有希望。

Groovy 2.0我没有运行新版本的经验。 坦率地说,我不是一个活跃的Groovy用户了。 然而,我期望上述的大部分问题都是根本性的,并且需要重大的科学突破。 我有一些开发HHVM(由Facebook创build的PHP虚拟机)的经验,并且有许多简单的functionperformance不佳。

所以在这里,我们在2012年和Groovy 2.0准备摇滚…

“使用@CompileStatic,Groovy的性能比Java慢1到2倍,没有Groovy,慢了大约3-5倍(…)这对我来说意味着Groovy已经准备好应用了,与Java有些相似“。

性能testing:Groovy 2.0与Java http://java.dzone.com/articles/groovy-20-performance-compared

除了作者,我从2008年开始使用Groovy取得了巨大的成功,不仅仅是为了简历,而是为了使业务能够及时完成工作。 性能永远是相对于你想要做的。


对于那些抱怨数字用例的人来说,这里使用的是一个真正的使用web框架的用例: http : //www.jtict.com/blog/rails-wicket-grails-play-lift-jsp/


“Groovy 1.8.x for fib(42)的原型大约需要3.8s( 比Java慢了12%,比Groovy 1.0快了一百倍 )所以我们可能不再鼓励人们用Java编写这样的”热点“。

资料来源: http : //www.wiki.jvmlangsummit.comhttp://img.dovov.com0/04/Theodorou-Faster-Groovy-1.8.pdf

“Groovy在数值计算方面的performance已经得到了改善,令我印象深刻的是,我的项目jlab(http://code.google.com/p/jlabgroovy/)中的;Groovy 1.8在我的其他项目ScalaLab(http://code.google.com/p/jlabgroovy/); //code.google.com/p/scalalab)!!“

资料来源: http : //groovy.329449.n5.nabble.com/Great-improvements-in-Groovy-s-performance-for-numerical-computing-td4334768.html

Groovy提供了比Java更多的语法糖,但仍然运行在JVM上,因此JVM需要更多的工作来提供糖。 尽pipe如此,在绝大多数正常使用中,这种差异是非常小的。

另外,如果你碰巧写了一个在Groovy中运行得太慢的函数,你可以用直接的Java编写,然后从Groovy代码中调用它。 这是团队推荐的解决scheme,我可以保证它运行良好,简单。

我认为,对于我们大多数人所做的编程,这是一个没有问题的问题。

快速的谷歌search产生了一些旧的性能结果( http://www.codecommit.com/blog/java/groovys-performance-is-not-subjective,http://www.christianschenk.org/blog/performance-comparison-介于-orovy和java /之间 )。

Groovy ++看起来也很有趣( http://stronglytypedblog.blogspot.com/2010/02/java-vs-scala-vs-groovy-vs-groovy.html )。

但是,使用Groovy的原因应该是因为它提高了您的性能, 而不是计算机…

一般来说,Groovy会变慢。 您可以通过切换到Groovy ++来避免这种情况,Groovy ++提供了Groovy的大部分function,但可以进行静态编译,并具有与Java相媲美的性能。

我认为,你必须看看这个科学比较Groovy Vs Python Vs PHP与Ruby。

http://blog.websitesframeworks.com/2013/11/comparison-of-programming-languages-ruby-groovy-python-and-php-353/

他们已经做了一个练习,并在以下因素上对这些编程语言进行比较:

 Comparison of time developing each exercise Comparison of readability of the languages Comparison of results in benchmarks and lines of code. From the project Computer Language Benchmarks Game Conclusions 

这是一个很好的快速的研究,让你更好的语言。

Groovy被编译为字节码.class文件,但运行Groovy类需要~5MB的groovy库,这会导致性能开销。