Groovy:for..in 比 .each 快得多吗?

标签 groovy microbenchmark

我很好奇 for..in应该优先于 .each出于性能原因。

最佳答案

For .. in是标准语言流控制的一部分。

而是 each调用一个闭包所以有额外的开销。
.each {...}是语法糖等价于方法调用.each({...})
此外,由于它是一个闭包,在 each不能使用的代码块 breakcontinue语句来控制循环。

http://kunaldabir.blogspot.it/2011/07/groovy-performance-iterating-with.html

更新了基准 Java 1.8.0_45 Groovy 2.4.3:

  • 3327981 每个{}
  • 320949 for(){

  • 这是另一个具有 100000 次迭代的基准测试:
    lines = (1..100000)
    // with list.each {}
    start = System.nanoTime()
    lines.each { line->
        line++;
    }
    println System.nanoTime() - start
    
    // with loop over list
    start = System.nanoTime()
    for (line in lines){
        line++;
    }
    println System.nanoTime() - start
    

    结果:
  • 261062715 每个{}
  • 64518703 for(){}
  • 关于Groovy:for..in 比 .each 快得多吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30661993/

    相关文章:

    datetime - Grails-如果少于10分钟,则比较Groovy日期时间

    groovy - 使用 Groovy 提取 URL 部分(博客名称)

    c++ - 如何优化Rcpp函数(调用另一个R函数)

    java - 使用 JMH Java 微基准测试浮点打印的随机数据

    java - 在构造函数中设置 Java 集合的大小是否更好?

    jenkins - 执行 DSL 时 Jenkins 2.0 中的 java.lang.ClassNotFoundException : java. lang$Enum

    groovy - 在 groovy 编译器异常的情况下,try/catch/finally 会掩盖 Jenkinsfile 问题

    grails - 如何在字符串bean中将html标签作为g:render标签的模型传递

    clang - 为什么添加 xorps 指令使这个函数使用 cvtsi2ss 并添加 ~5x 快?

    java - 如何用 Java 编写正确的微基准测试?