阅读更多

5顶
8踩

编程语言

原创新闻 性能对比:Groovy 2.0 vs. Java

2012-08-29 17:22 by 副主编 wangguo 评论(23) 有30440人浏览
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,所用时间已经明显减少。静态类型和类型推断对于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
  • 大小: 64.6 KB
  • 大小: 99.5 KB
5
8
评论 共 23 条 请登录后发表评论
3 楼 juniort 2012-08-29 20:21
groovy没接触多长时间,又冒出来个kotlin
2 楼 lection.yu 2012-08-29 19:40
if(i!=我){} 写道
笑了,任何一个语言,被任何另外的一个语言快5倍,这个语言就没存在的必要!还20倍!!!

不知道哪里可笑了。你觉得ruby和汇编比起来,要慢多少?至少有数据表明的,Groovy和Ruby速度差不多。按你的说法,大部分动态语言都没有必要存在了。全比汇编慢5倍以上。
1 楼 if(i!=我){} 2012-08-29 18:53
笑了,任何一个语言,被任何另外的一个语言快5倍,这个语言就没存在的必要!还20倍!!!

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • groovy 慢_性能对比:Groovy 2.0 vs. Java

    Java 7 vs Groovy 2.1性能比较自从我与Grails上一次接触以来,我已经有两年没有使用Groovy了。 我陷入(硬)核心企业Java中,并且在后台遇到了一些性能方面的问题。 我几乎错过了学习Spock的机会,但是幸运的是, 华沙...

  • Aviator和Groovy在表达式执行上的性能测试

    工具 执行原理 优点 缺点 性能建议 ...通过ASM框架将表达式直接翻译成对应的 java 字节码执行,整个过程最多扫两趟(开启执行优先模式,如果是编译优先模式下就一趟) 编译字节码是通过ASM框架在指令层次

  • 怒肝3W字Java学习路线!从入门到封神全包了(建议收藏)

    大家好!我是一航!...这些其实是一个非常普遍且正常的现象,会焦虑的人,往往都是对自己要求比较严苛的好同志;如果躺平了,何来焦虑可言! 鉴于其中关于学习方向,学习路线的问题,其实网络如此发达.

  • groovy 2.5.4_Groovy 2.0的新功能是什么?

    groovy 2.5.4 新发布的Groovy 2.0通过静态类型检查和静态编译为该语言带来了关键的静态功能,采用了与JDK 7相关的改进,以及Project Coin语法增强功能和对新的“调用动态” JVM指令的支持,并且比以前更加模块化 。...

  • groovy 2.5.4_Java 7 vs Groovy 2.1性能比较

    我陷入(硬)核心企业Java中,但在后台遇到了一些性能方面的问题。 我几乎错过了学习Spock的机会,但是幸运的是, 华沙Java用户组帮助我摆脱了一些旧系统,恢复了正常的自我开发。 实际上,我希望Spock或Geb之类的...

  • groovy 慢_Groovy系列-groovy比起Java--有哪些地方写起来更舒服?

    groovy比起java-有哪些地方写起来更舒服java发展缓慢,语法落后冗余说起java,其实java挺好的,java现在的性能也不错,但是,java的语法显然比较落后,而且冗余,getter/setter之类的,5的泛型 for each,autobox,7的钻石语法...

  • Java 7 vs Groovy 2.1性能比较

    我陷入(硬)核心企业Java中,并且在后台遇到了一些性能方面的问题。 我几乎错过了学习Spock的机会,但是幸运的是, 华沙Java用户组帮助我摆脱了一些旧系统,恢复了正常的自我开发。 实际上,我希望Spock或Geb之类...

  • 工作中使用到的单词(软件开发)

    ■2021/01/01以降整理 ■2021/02/22以降整理 ■匿名内部类,lambda表达式,JDK7新特性,等等java相关 ■2021/03/18以降整理 Linux系统性能 相关 ■其他各种单词,知识(linux awk sed) ■网络相关 ■2021/03/29以降...

  • http://www.open-open.com/ java 开源资料 介绍

    Java开源大全v/:* { BEHAVIOR: url(#default#VML)}function SideBarToggle() { if (block == $(sidebar).style.display || ==$(sidebar).style.display) { $(sidebar).style.display = none;

  • groovy 规则引擎 java_Drools, IKExpression, Aviator和Groovy字符串表达式求值比较

    Gradle脚本是基于一种JVM语言 -- Groovy,再加上DSL(领域特定语言)语言组成的。因为eSOC项目的一个重要功能就是规则引擎,规则引擎的主要功能就是关联分析。规则引擎的最基本的功能就是计算表达的值(表达式是规则中...

  • mvel 调用java_java MVEL2/Spring EL表达式、直接调用、反射性能实测

    importjava.io.Serializable;importjava.lang.reflect.Field;importjava.util.HashMap;importjava.util.Map;importorg.mvel2.MVEL;/*** Id 模型*/public class Id implementsSerializable {privateLong id;public...

  • 工作中使用到的单词(软件开发)_2023_0316备份

    目录■Java学习汇总■常用链接■2020/03/15 (最初...2021/01/01以降整理■2021/02/22以降整理■匿名内部类,lambda表达式,JDK7新特性,等等java相关■2021/03/18以降整理Linux系统性能 相关■其他各种单词,知识(l

  • Java 下一代: Groovy、Scala 和 Clojure

    Groovy 2.0 新增了一个 @TypeChecked注释,使您能够在类或方法级别上制定严格类型检查特别决策。清单 4 举例说明了这个注释: 清单 4. 类型检查与注释 @TypeChecked @Test void type_checking() {...

  • java中只想groovy_Groovy 相对 Java 的一些新玩意

    Groovy 是轻量级的 Java方法,闭包中 return 语句是可选的,如果没有 return,则默认返回方法、闭包的最后一条语句的值方法和类默认的修饰符都是 publicGroovy 不强迫我们捕获自己不关系的异常,这些异常会被传递给...

  • Java数据审计工具:Envers and JaVers比较

    在Java世界中,有两种数据审计工具:Envers和JaVers。 Envers已经存在了很长时间,它被认为是主流。 JaVers提供全新的方法和技术独立性。 如果您考虑哪种工具更适合您的项目,本文是一个很好的起点。本文分为三个...

  • Java 开发 2.0: 现实世界中的 Redis

    在本期的 Java 开发 2.0 中,Andrew 尝试将 Redis 添加(通过基于 Java™ 的变体 Jedis 方法)到他自己的基于定位的移动应用程序。了解如何将 Redis 作为一个简单数据存储来使用,然后尝试再利用

  • Java的前世今生

    搞Java 6年了,一直想对Java有一个系统的认识,今天终于做了这件事。Java不仅仅是一门编程语言,还是一个由一系列计算机软件和规范形成的技术体系,这个技术体系提供了完整的用于软件开发和跨平台部署的支持环境,并...

  • spring-boot框架基础

    ======================1、零基础快速入门SpringBoot2.0 5节课 =========================== 1、SpringBoot2.x课程全套介绍和高手系列知识点 简介:介绍SpringBoot2.x课程大纲章节 java基础,jdk环境,maven基础...

  • 【Java工具类】学会MVEL2.0,表达式解析再不怕

    MVEL为 `MVFLEX Expression Language`(MVFLEX表达式语言)的缩写,是一种基于`Java语法`,但又有着显著不同的表达式语言。与Java不同的是,MVEL是一种`动态/静态可嵌入`的表达式语言,意味着源代码中不需要`类型...

  • Adroid 收集

    Android AOP之字节码插桩详解 文章从AOP的概念出发,介绍了Android中AOP的实现方式及几种实现对比的对比,之后介绍了AOP的一些使用场景,然后开始重点叙述了实现字节码插桩的技术细节,文章比较长,而且有些知识...

Global site tag (gtag.js) - Google Analytics