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

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

62
задан chiastic-security 30 August 2017 в 12:21
поделиться

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 .

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

58
ответ дан 24 November 2019 в 16:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: