Обоснование @inline в Scala действительно помогает производительности?

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

Ответ 1

Мне еще нужно найти случай, когда он улучшает производительность, и я пробовал в нескольких разных местах. 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.

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