Действительно ли аннотация @inline в Scala помогает повысить производительность? - PullRequest
61 голосов
/ 25 апреля 2010

Или это просто загромождает код для чего-то, что JIT позаботится автоматически в любом случае?

1 Ответ

56 голосов
/ 26 апреля 2010

Мне еще предстоит найти случай, когда это улучшает производительность, и я пробовал в нескольких разных местах. JVM, кажется, неплохо умеет встраивать, когда это возможно, и даже если вы просите @inline в Scala, он не всегда может это сделать (и иногда я замечал, что это не так, даже когда я думаю, что это должно быть в состоянии).

Место, где вы ожидаете увидеть разницу в байт-коде, выглядит примерно так:

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.

Так что, возможно, стоит попробовать на последних этапах оптимизации, но я бы не стал делать это регулярно, не проверяя, влияет ли это на производительность.

...