性能对比: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(测试代码),并进行测试。测试环境如下:
测试结果如下(加入了Kotlin语言以作对比):
我们可以看到,使用了静态类型的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倍(见这篇文章最后或下图)。
可见@CompileStatic的使用与否有很大的不同。这似乎表明,现在的Groovy是为了想让性能媲美Java的应用程序而准备的,而在此之前,Groovy只能让你的简历看起来好看一点。
从目前看来,Groovy的性能仍有很大的提升空间。
Via dzone
而开发者也比较关心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,所用时间已经明显减少。静态类型和类型推断对于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倍(见这篇文章最后或下图)。
可见@CompileStatic的使用与否有很大的不同。这似乎表明,现在的Groovy是为了想让性能媲美Java的应用程序而准备的,而在此之前,Groovy只能让你的简历看起来好看一点。
从目前看来,Groovy的性能仍有很大的提升空间。
Via dzone
下一篇: 豆瓣的程序性能真的很惊人,但...
推荐阅读
-
6核战8核谁强!锐龙5 5600X VS. i7-11700K游戏性能对比评测
-
【Java必修课】判断String是否包含子串的四种方法及性能对比
-
JAVA String.format的使用以及StringBuilder和String ‘+’的性能对比
-
酷睿i7-11800H VS.锐龙7 5800H游戏性能对比:秒杀还是反杀?
-
Java 7新特性及各版本性能对比测试
-
Java基础之List内元素的排序性能对比
-
平台相差千元!锐龙7 5800X VS. i5-12600K游戏性能对比:网游仍是AMD绝对优势
-
java序列化框架码流、性能对比
-
Groovy-Java性能对比
-
Groovy-Java性能对比