问题 Groovy 2.0与静态编译的性能如何?


我看到最近发布的Groovy 2.0包括可选的静态编译以及其他一些额外的好处,比如可选的静态类型检查。在做了一些搜索之后,我找不到任何广泛的基准测试,将Groovy的性能(使用静态编译)与Java和Scala进行比较。有谁知道任何这样的性能比较?我们可以假设它与Groovy ++在它死之前是一样的吗?如果它的性能可比,那么Groovy是否可以替代大型,性能关键的应用程序?


9362
2017-07-05 12:32


起源



答案:


有一些 基准在这里 (虽然很难看到发生了什么)

但是,采用Groovy 1.8.2 Fib 来自页面底部的源代码,并在groovy 2.0中运行它给您:

Groovy(static ternary): 1623ms
Groovy(static if): 1583ms
Groovy(instance ternary): 1744ms
Groovy(instance if): 1694ms

@groovy.transform.CompileStatic 在脚本的顶部为您提供:

Groovy(static ternary): 819ms
Groovy(static if): 799ms
Groovy(instance ternary): 816ms
Groovy(instance if): 811ms

显然,这不是一个完整的基准测试(它只测试一件事),它不包括热身或任何东西,而Groovy 2.0只出现了一周,但它确实暗示了在这种情况下良好的速度提升......


6
2017-07-05 13:09



尼斯。这是一个非常显着的进步。 - Nicholas
谢谢蒂姆,这正是我所寻找的链接类型,尽管很高兴看到Groovy 2.0(静态)和Java / Scala性能之间的更多比较。我认为你是对的,但是我们可能要等待,因为它只持续了一个星期。 - user1503949
我相信java在大约550ms内运行这些测试 - tim_yates
@ user1503949你总是需要花几分钟来启动一个编译器并运行所有3来查看你得到的结果?可能比试图让人们为你做的更容易,更快捷? - tim_yates
@tim_yates这最后的评论似乎毫无疑问。我希望程序员能够在实际应用程序中体验Groovy 2.0的性能。看一下问题的最后部分。 - user1503949


答案:


有一些 基准在这里 (虽然很难看到发生了什么)

但是,采用Groovy 1.8.2 Fib 来自页面底部的源代码,并在groovy 2.0中运行它给您:

Groovy(static ternary): 1623ms
Groovy(static if): 1583ms
Groovy(instance ternary): 1744ms
Groovy(instance if): 1694ms

@groovy.transform.CompileStatic 在脚本的顶部为您提供:

Groovy(static ternary): 819ms
Groovy(static if): 799ms
Groovy(instance ternary): 816ms
Groovy(instance if): 811ms

显然,这不是一个完整的基准测试(它只测试一件事),它不包括热身或任何东西,而Groovy 2.0只出现了一周,但它确实暗示了在这种情况下良好的速度提升......


6
2017-07-05 13:09



尼斯。这是一个非常显着的进步。 - Nicholas
谢谢蒂姆,这正是我所寻找的链接类型,尽管很高兴看到Groovy 2.0(静态)和Java / Scala性能之间的更多比较。我认为你是对的,但是我们可能要等待,因为它只持续了一个星期。 - user1503949
我相信java在大约550ms内运行这些测试 - tim_yates
@ user1503949你总是需要花几分钟来启动一个编译器并运行所有3来查看你得到的结果?可能比试图让人们为你做的更容易,更快捷? - tim_yates
@tim_yates这最后的评论似乎毫无疑问。我希望程序员能够在实际应用程序中体验Groovy 2.0的性能。看一下问题的最后部分。 - user1503949


我相信java在大约550ms内运行这些测试

我做了一些与Java的性能比较。对于使用@CompileStatic的Groovy的“静态三元”和“静态if”性能与Java有些相同。对于“实例三元”和“实例如果”,它几乎是2的因子。见我的 博客文章


5
2017-08-26 10:58