Каким образом экономится память при использовании inline функции

«Каким образом экономится память при использовании inline функции» — вопрос из категории Kotlin, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Inline-функции экономят память за счёт устранения накладных расходов на вызов функции. Вместо генерации отдельного блока кода для функции и операций call/return, компилятор подставляет тело функции прямо в место вызова.

Пример:

inline fun measureTime(block: () -> Unit) {
    val start = System.currentTimeMillis()
    block()
    println("Time: ${System.currentTimeMillis() - start}ms")
}

// При компиляции код превратится в:
val start = System.currentTimeMillis()
println("Hello") // тело лямбды
println("Time: ${System.currentTimeMillis() - start}ms")

Особенности:

  • Уменьшает количество объектов (не создаётся Function объект для лямбды)
  • Улучшает производительность за счёт устранения вызова
  • Может увеличить размер бинарного файла, если inline-функция вызывается многократно
  • Подходит для функций с лямбда-параметрами и небольших утилитных функций