JSR-292(invokedynamic)对Groovy性能的影响是多少?

时间:2010-01-06 06:01:15

标签: java groovy invokedynamic

是否有估计表明JSR-292会对Groovy性能产生多大影响?

4 个答案:

答案 0 :(得分:4)

invokedynamic确实是一个复杂的故事,因为JDK7中的性能特征一直在变化。在将Groovy移植到indy期间,我真的非常接近Java,大约是因子1.5。但是我必须使用catchExceptionGuard,它会将性能降低到3-4因子。我们仍然需要研究避免使用该防护的方法。也许我们必须打破Groovy 2.2中的一些现有代码。无论如何,我不需要上面提到的invokeMethod后备的守卫。 GroovyRuntimeExceptions可能包含其他异常,我必须解包或做其他事情。因此,对于现有方法,理论上可能的性能似乎介于Java和Java速度的一半之间。调用invokeMethod的性能完全不同。

如果您需要更多,请在Groovy 2.0中使用@CompileStatic。

答案 1 :(得分:3)

我认为还没有基准测试,直到某人执行它我们只能猜测...

您可能会发现此事this post很有趣。

答案 2 :(得分:2)

答案 3 :(得分:0)

我不确定它对Groovy有多大适用性。如果我记得很清楚,Groovy有一些后备(例如invokeMethod方法)。我认为不可能简单地使用invokedynamic回退。

但是,有一些方法:

  • 捕获未找到方法时引发的异常。不幸的是,可能有必要分析堆栈跟踪,因为您无法确定它是从哪里抛出的。调用不存在的方法时,这可能是一个显着的减速,无论它是由invokeMethod回调处理的。
  • 看看Groovy ++。如果您满足某些约束条件,它允许您使用静态类型。在这种情况下,可以允许您切换到“严格动态模式”,这不允许这些后备。