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