欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  资讯频道

性能对比:Groovy 2.0 vs. Java

程序员文章站 2022-03-08 21:21:58
...
Groovy 2.0已于今年6月份发布,该版本支持静态类型检测,并改进了性能,集成了JDK7 invokedynamic和类型推断,以便从JVM对动态语言的支持中获益。

而开发者也比较关心Groovy 2.0相比之前的版本性能改善了多少,以及与Java相比性能如何。开发者Oliver Plohmann做了一项测试,以对比Groovy 2.0和Java的性能。

Oliver称,在某些情况下,性能之间的差别已经变得很小,或者至少可以接受。但是,Groovy已经用于生产很长时间了,现在是时候认真考虑一下Groovy的性能了。

Oliver此次使用他唯一能在网上找的基准测试jlabgroovy,且只能测试有/无@CompileStatic注解的Groovy代码计算斐波那契数列的速度。就是说,这项测试只是对Groovy和Java的性能有一个粗略的估计,而对于想知道整体性能差异的开发者来说,这些测试数据不是非常有意义的。

测试环境

由于jlabgroovy基准测试是基于Groovy语言的,并不包含用于计算斐波那契数列的Java代码,因此Oliver将Groovy 代码移植到Java(测试代码),并进行测试。测试环境如下:

  • CPU:Intel Core2 Duo E8400 3.00 GHz
  • 操作系统:Windows 7 with Service Pack 1
  • Java版本:JDK7u6
  • IDE:Eclipse Juno + Groovy插件
  • Groovy编译器版本:2.0.0.xx-20120703-1400-e42-RELEASE
测试结果

测试结果如下(加入了Kotlin语言以作对比):

性能对比:Groovy 2.0   vs.  Java

我们可以看到,使用了静态类型的Groovy,所用时间已经明显减少。静态类型和类型推断对于Groovy的性能影响不言而喻,这意味着以同样的方式进行优化的Groovy++(Groovy的静态类型增强版)也变得非常强大。

数据显示,有了@CompileStatic,Groovy大约比Java慢1-2倍,而没有@CompileStatic,大约慢3-5倍。遗憾的是,“instance ternary”和“instance if”基准测试是最慢的。因此,除非开发者想使用静态方法来构建一个伟大的作品,否则“static ternary”和“static if”测试数据对于目标是面向对象(基于实例)的大多数代码来说不是很重要。

新型JVM语言Kotlin

在上面的测试中,Oliver加上了Kotlin测试代码)的测试数据。使用的版本为Kotlin 0.1.2580。

Kotlin是一个相对比较新的、静态类型的、基于JVM的、兼容Java的编程语言。Kotlin比Java更加简洁,并支持变量类型推断、高阶函数(闭包)、构造函数、混淆(mixins)和一级委托等。Kotlin更接近Scala,并且与Java能够很好地兼容。

Kotlin目前仍处于开发阶段,官方正式版本还未发布,JetBrains(Kotlin开发商)仍然在对其代码进行优化。理想情况下,Kotlin应该和Java一样快。

结论

在Groovy 1.7、1.8版本中,Groovy大约比Java慢10-20倍(见这篇文章最后或下图)。

性能对比:Groovy 2.0   vs.  Java

可见@CompileStatic的使用与否有很大的不同。这似乎表明,现在的Groovy是为了想让性能媲美Java的应用程序而准备的,而在此之前,Groovy只能让你的简历看起来好看一点。

从目前看来,Groovy的性能仍有很大的提升空间。

Via dzone