web-dev-qa-db-ja.com

Scalaの@inline注釈は本当にパフォーマンスに役立ちますか?

それとも、JITがとにかく自動的に処理するコードを散らかすだけですか?

64
Alex R

パフォーマンスが向上するケースをまだ見つけていません。かなりの数の異なる場所で試しました。 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に適用されることに気付くことができるため、通常はそれより速く実行されません。

したがって、最適化の最終段階で試してみる価値はあるかもしれませんが、パフォーマンスに違いがあるかどうかを確認することなく、日常的に行うことはありません。

58
Rex Kerr