我应该使用Groovy的@CompileStatic如果我也使用Java 7(Should I us

2019-08-16 20:36发布

我已经通过阅读“什么是在Groovy 2.0新” ,我有点困惑时使用@CompileStatic。 文章提到, @CompileStatic开发商谁不能够采取Java7的调用动态部分的优点加注释。

因此,开发商找的性能改进不会看到在Groovy 2.0多大的变化,如果他们不能在JDK 7上运行幸运的是,Groovy开发团队认为这些开发人员可以得到有趣的性能提升,其他优点外,允许类型检查代码进行静态编译。

我的问题是,如果我使用JDK 7,我按照说明添加--indy标志,我需要添加@CompileStatic看到一些性能提升? 此博客暗示我想,但我不知道他编写正确地给他这样做是在Eclipse。

更新:运行菲波纳契码的不同排列时,这里是统计数据。

> groovy --indy FibBoth.groovy
..........Fib (non-static indy): 1994.465
..........Fib (static indy): 529.197

> groovy FibBoth.groovy       
..........Fib (non-static): 1212.788
..........Fib (static): 525.671

注意:这个问题现在我明白功能是独立的,似乎有点混乱。 由于问题的基础,是围绕从做笔记的困惑我觉得两个特点均与我觉得很有道理不改变问题的措辞,并允许接受的答案解释的差异。

Answer 1:

印地的版本是完全动态的Groovy,因为它是已知的,只是速度更快感谢JDK 7 invokedynamic。 @CompileStatic意味着静态编译。 虽然比正常的Groovy快,它可以只编译Groovy中的一个子集,表现有点不同。 特别是所有的动态功能不再可用。 所以,如果你想使用动态功能则印是唯一的选择。 如果你是一个静态的家伙,只使用语言的一小部分,然后@CompileStatic可以使用。

斐波那契是BTW不是测试中invokedynamic可以发光。 印地端口并不总是更好。 但是,如果你比如做了很多与元编程,然后印会更好。

你必须决定根据最终您的使用情况



Answer 2:

熬下来,@CompileStatic消除有利于速度的一些Groovy的动态运行时功能。

所以,从理论上讲:

  • JDK7应该会更快的比JDK6因为invokedynamic
  • @CompileStatic应该比标准的更快,因为一些开销和功能将被删除。

所有这一切需要提醒的是,将在很大程度上取决于你在做什么,各种功能进行优化,以不同的程度。



文章来源: Should I use Groovy's @CompileStatic if I'm also using Java 7