65

或者它是否只是将 JIT 自动处理的代码弄乱了?

4

1 回答 1

60

我还没有找到可以提高性能的案例,而且我已经在很多不同的地方进行了尝试。JVM 似乎在可能的情况下非常擅长内联,即使你在 Scala 中要求 @inline,它也不能总是这样做(有时我注意到它甚至在我认为应该这样做的时候也没有能够)。

您希望看到字节码差异的地方是这样的:

object InlineExample {
  final class C(val i: Int) {
    @inline def t2 = i*2
    @inline def t4 = t2*2
  }
  final class D(val i: Int) {
    def t2 = i*2
    def t4 = t2*2
  }
}

编译时使用-optimise. 您确实看到了差异,但它通常不会运行得更快,因为 JIT 编译器可以注意到相同的优化适用于D.

因此,在优化的最后阶段可能值得一试,但如果不检查它是否会对性能产生影响,我不会经常这样做。

于 2010-04-25T21:44:01.090 回答