jul*_*icz 50
Groovy编译为JVM显然是正确的.然而,这与性能无关.
这里要注意的最重要的事情是Groovy是一种动态语言.这实际上意味着大部分时间Groovy编译器几乎不知道它正在调用/从中检索属性的对象的类型.这对性能有很大影响.可能有数千个不同的类实现someFancyMethodName()没有公共基类.然而,对obj.someFancyMethodName()的调用必须选择正确的.没有比基于某种反射在运行时决定它更好的方法了.实际上,因为这样,对方法的每次调用都会通过对对象元类的invokeMethod()调用来调度.如果您的程序抛出一些令人讨厌的异常,这在堆栈跟踪中非常明显.情况更糟.groovy中的任何类都可以选择动态地提供给定名称的方法的实现,即在运行时生成它们.有相当数量的Grails魔法大量使用它.当方法重载发挥作用时,出现了另一个复杂问题.由于类型知识非常有限,因此无法在编译时选择正确的方法版本.生成的代码必须查看提供的对象,然后通过制作一系列if-elses选择最适合所提供调用的实现.这大部分时间都是一个非常重要的过程,从未打算在运行时执行.然而,Groovy必须这样做,以便与Java保持互操作.
所有这一切使得Groovy相当慢.事实上,比大多数动态语言(例如Python)更慢,更痛苦,更多的内存消耗.
也就是说,我同意使用Groovy的原因当然不是性能.大多数情况下,您最终只会优化代码的一小部分.如果性能是一个问题,你总是可以用纯Java重写那些特定的部分,或者尝试使用Groovy ++.我自己没试过,但是我在网上看到的结果似乎很有希望.
Groovy 2.0我没有运行新版本的经验.坦率地说,我不再是一个活跃的Groovy用户了.然而,我希望上述大多数问题基本上都很难,需要重大的科学突破.我有一些开发HHVM(由Facebook创建的PHP虚拟机)的经验,并且有许多简单的功能表现不佳.
Wan*_*tos 18
所以我们在2012年,Groovy 2.0已准备好摇滚......
"使用@CompileStatic,Groovy的性能比Java快1-2倍,而且没有Groovy,它的速度要慢3-5倍.(...)这对我来说意味着Groovy已经准备好应用程序了与Java相当."
性能测试:Groovy 2.0与Java http://java.dzone.com/articles/groovy-20-performance-compared
除了autor之外,我自2008年以来一直使用Groovy取得了巨大的成功,不仅仅是为了简历,只是为了及时完成工作.性能与您想要的相关.
对于那些抱怨数字用例的人来说,这是一个使用Web框架的真实用例:http://www.jtict.com/blog/rails-wicket-grails-play-lift-jsp/
"用于fib(42)的Groovy 1.8.x原型需要大约3.8s(比Java慢12%,比Groovy 1.0快100多倍)因此我们可能不再鼓励人们在Java中编写这样的"热点".
资料来源:http://www.wiki.jvmlangsummit.com/images/0/04/Theodorou-Faster-Groovy-1.8.pdf
"我对Groovy在数值计算方面的表现有多大提升印象深刻.我的项目jlab中的Groovy 1.8(http://code.google.com/p/jlabgroovy/)有时在我的其他项目ScalaLab中胜过Scala的表现(http: //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提供更多的工作才能提供糖.然而,在绝大多数正常使用中,差异非常小.
另外,如果你碰巧编写了一个在Groovy中运行得太慢的函数,你可以用直接的Java编写它并从你的Groovy代码中调用它.这是该团队推荐的解决方案,我可以保证它运作良好而且简单.
我认为,对于我们大多数人所做的节目,这不是问题.
小智 8
快速谷歌搜索产生了一些旧的性能结果(http://www.codecommit.com/blog/java/groovys-performance-is-not-subjective,http://www.christianschenk.org/blog/performance-comparison-介于-groovy-and-java /)之间.
Groovy ++看起来也很有趣(http://stronglytypedblog.blogspot.com/2010/02/java-vs-scala-vs-groovy-vs-groovy.html).
然而,之所以使用Groovy应该是因为它提高你的表现没有电脑...