`
seanwon
  • 浏览: 66119 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Groovy 1.6.0 BETA 1 发布了!性能有显著提升!

阅读更多
转载自:蛟龍居 山不在高,有仙則名;水不在深,有龍則靈
<a href="http://www.blogjava.net/BlueSUN/archive/2008/05/03/197863.html">链接</a>
文章中提到的性能提高,本人做过实验,的确提高很多。

Groovy 1.6.0 BETA 1终于发布了,除了一些BUG修正外,最令人兴奋的是,Groovy的运行效率有了显著的提升。官方用Great Language Shootout的基准测试得出Groovy 1.6.0 BETA 1的性能相比Groovy 1.5.6 GA,提升了150%~460%。

眼见为实,耳听为虚,我自己也做了一个相对简单的性能测试:

利用Groovy 1.6.0 BETA 1将下面解决八皇后问题的代码执行10次,结果如下:
                      1     2     3     4     5     6     7     8     9    10            AVG
Groovy1.5.6GA   :  1360  1156   969  1000  1063  1110   938  1046  1031   954         1062.7
Groovy1.6.0BETA1:   187   171   141   109   187   156   172   141   203   187          165.4

经过计算,Groovy1.6.0BETA1的性能相比Groovy1.5.6GA,提升了542.5%。

如果是普通应用程序代码的话,提升的幅度会小一点。


此外,Groovy1.6.0BETA1还支持Multiple assignments(多重赋值)
def listOfN(numOfElem) {
    1..numOfElem
}

def a, b
[a, b] = listOfN(1)
assert a == 1
assert b == null

[a, b] = listOfN(10)
assert a == 1
assert b == 2

[a, b] = [b, a]
assert a == 2
assert b == 1

还支持Annotations的定义,(在Groovy 1.6.0之前,Annotations的定义只能放在Java代码中):
@interface Cachable {
    String cache()
}
最后一个值得关注的新特性就是引入@Bindable这个Annotation
具体使用方法请参考: Groovy高效编程——@Bindable的使用


八皇后问题代码:
q = 8
i = new int[q]
count = 0

def scan(n){
    if (n == q){
        println(i.toList())
        count++
        return
    }
    i[n]=0
    while (i[n] < q){
        i[n] = i[n]+1
        if (check(n))
            scan(n + 1)
    }
}
def check(n){
    if (n > 0)
        for (j in 0..<n)
            if (i[j] == i[n] || i[j] - i[n] == j - n || i[j] - i[n] == n - j)
                return false
    return true
}

long t1 = System.currentTimeMillis()
scan(0)
long t2 = System.currentTimeMillis()
println("total time:" + ( t2 - t1))  // 耗时
println("total results:" + count)
分享到:
评论

相关推荐

    Groovy1.8 beta 官方文档-1269页

    Groovy1.8对闭包的处理更加优化,提升了性能,同时也增加了新的语法糖,使得闭包的使用更加简洁。文档中会详尽解释闭包的定义、作用域以及如何与其他语言结构如for循环和if语句结合使用。 元编程(Metaprogramming...

    groovy-2.4.0-beta-1.zip

    Groovy-2.4.0-beta-1.zip 是一个压缩包,其中包含了Groovy编程语言的一个特定版本,即2.4.0的测试版1。Groovy是一种动态、灵活的面向对象的脚本语言,它运行在Java平台上,并且与Java紧密集成。Groovy提供了简洁的...

    jdk1.6.0-12

    - **改进的XML处理**:包括SAX和DOM解析器的性能提升,以及StAX(Streaming API for XML)的集成。 - **改进的JDBC**:支持更强大的连接池管理,增强了SQL语句的处理。 2. **JDK 1.6.0_12 更新内容**: - **安全...

    apache-groovy-sdk-2.5.0-beta-2.zip

    Apache Groovy SDK 2.5.0-beta-2是一个重要的软件开发工具包,专为Groovy编程语言设计,这是Groovy的一个预发行版本,旨在在正式发布前进行测试和优化。Groovy是一种强大的、动态的、基于Java平台的脚本语言,它提供...

    jdk1.6.0_20

    8. 性能提升:通过优化JIT(Just-In-Time)编译器和内存管理,JDK 1.6在许多场景下都实现了性能提升。 三、文件结构 "jdk1.6.0_20"压缩包内通常包含以下主要文件和目录: - bin:存放可执行命令,如javac、java、...

    Groovy Script 入门

    println "Hello, Groovy!" ``` 1. **创建Groovy文件**:使用文本编辑器创建一个名为hello.groovy的文件,并输入以上代码。 2. **执行脚本**:打开命令行窗口,导航至包含hello.groovy文件的目录,然后输入`groovy ...

    groovy-xml-2.2.0-beta-1.zip

    "groovy-xml-2.2.0-beta-1.zip" 文件是Groovy的一个版本,专注于XML处理功能,特别适用于在Groovy中解析、操作和生成XML文档。这个版本为2.2.0的beta-1,意味着它是该版本系列中的早期测试版,开发者可能在其中寻找...

    ADF_Groovy(1)

    **正文** ...总的来说,Groovy在ADF BC中的应用提供了许多优势,包括灵活性、扩展性、性能和开发效率的提升。理解并熟练掌握Groovy在ADF BC中的使用,对于提升Oracle应用开发的专业水平至关重要。

    elasticsearch-groovy-1.6.0.jar

    Elasticsearch 的官方 Groovy 客户端 org.elasticsearch/elasticsearch-groovy/1.6.0/elasticsearch-groovy-1.6.0.jar

    Groovy 2 Cookbook

    1. **性能提升**: - Groovy 2 相对于早期版本,在性能上有显著提升。这得益于对 AST 转换的优化和 JIT 编译器的支持。 - 对于频繁执行的操作,如闭包调用等,进行了特别优化。 2. **静态类型支持**: - Groovy ...

    groovy和Java相互调用1

    标题中的“Groovy和Java相互调用1”指的是在编程时如何在Groovy语言环境中调用Java类,以及反之,如何在Java程序中调用Groovy类。这是一种跨语言交互的方式,特别是在混合使用Groovy和Java的项目中非常常见。 ...

    java、groovy、C#、Javascript性能比较

    java、groovy、C#、Javascript的运行效率到底如何? 通过实验比较,Javascript的运行效率解决java,看来基于javascript的html5前途远大。 C#的Release版的运行性能也相当高,和C++相差不大,值得推荐。 文件内部...

    apache-groovy-docs-2.5.0-beta-2.zip

    Groovy 2.5.0-beta-2是这个语言的一个重要版本,它在2017年11月9日发布时,被视为Groovy的最新稳定版,文件大小约为15.4 MB。此版本的文档包含了全面的Groovy 2.5 API和开发者指南,旨在帮助用户理解和使用这一版本...

    Java调用Groovy,实时动态加载数据库groovy脚本

    1. 引入Groovy库:在Java项目中添加Groovy的相关依赖,通常是`groovy-all`,确保Java能够访问Groovy运行时环境。 2. 创建GroovyClassLoader:使用这个类加载器可以动态加载和执行Groovy脚本。它继承自Java的...

    groovy-all

    1. **Groovy Language Runtime**: 这是Groovy的核心,实现了Groovy语法解析、编译和执行。它允许开发者用Groovy代码进行编程,并在Java虚拟机(JVM)上运行。 2. **Groovy Compiler**: Groovy的编译器可以将Groovy...

    groovy中map的基本操作1

    访问Map中的值有三种方式:1) 使用下标操作符,如`map['a']`;2) 使用点语法,如`map.a`,这在键是有效标识符时可用;3) 调用`get()`方法,可以接受一个默认值,如`map.get('a', 0)`,若键不存在则返回默认值。`get...

    groovy-2.3.6-installer

    Groovy 2.3.6是该语言的一个稳定版本,发布于2014年,它提供了许多改进和新特性。对于开发者来说,选择特定版本可能是因为它满足了项目需求或与已有的系统兼容。Groovy 2.3系列引入了类型推断,使得代码更加可读和...

    apache-groovy-3.0.8.zip apache官网的groovy3.0.8版本

    apache-groovy-3.0.8.zip apache官网的groovy3.0.8版本,希望大家多多下载,apache-groovy-3.0.8.zip apache官网的groovy3.0.8版本,希望大家多多下载,apache-groovy-3.0.8.zip apache官网的groovy3.0.8版本,希望...

    Groovy入门教程[参照].pdf

    1. 简洁的语法:Groovy 语法简洁,减少了代码的长度,提高了编程效率。 2. 动态语言:Groovy 是一种动态语言,不需要强制类型声明,所有变量都是对象。 3.兼容 Java:Groovy 可以与 Java 语言混合使用,Groovy 代码...

Global site tag (gtag.js) - Google Analytics