Лямбда-выражения. Как они работают "под капотом"

Лямбда — это, по сути, анонимная функция. Она может передаваться как параметр в метод, сохраняться в переменной или возвращаться из функции. Но что же происходит, когда компилятор встречает твою лямбду?

Когда ты пишешь лямбда-выражение, JVM не создаёт для него какой-то магической структуры. Вместо этого, она использует уже знакомый нам механизм функциональных интерфейсов. Это интерфейсы с единственным абстрактным методом, которые могут быть реализованы через лямбду.

Когда компилятор видит лямбду, он не создаёт новый класс, а использует механизм, называемый invokedynamic. Вместо традиционного создания анонимных классов (как было до Java 8), JVM генерирует специальный байт-код, который динамически вызывает метод функционального интерфейса.

  • Лямбда привязывается к функциональному интерфейсу.
  • В Java 8 появился новый тип вызова метода — invokedynamic. Этот механизм позволяет JVM во время исполнения программы найти и подставить нужный метод. Благодаря этому лямбда-выражения работают быстрее и занимают меньше памяти, чем старые анонимные классы.
  • Лямбда связывается с методом интерфейса через динамическое разрешение. Это значит, что JVM не создаёт новый объект для каждой лямбды, а генерирует байт-код для вызова метода при необходимости.

Пример реализации через функциональный интерфейс на изображении.

В отличие от анонимных классов, лямбда-выражения не создают лишние объекты, что снижает нагрузку на память. Механизм invokedynamic позволяет JVM динамически оптимизировать вызовы методов, что делает выполнение лямбд более быстрым.

Лямбда-выражения. Как они работают "под капотом" | Сетка — новая социальная сеть от hh.ru
repost

210

input message

напишите коммент

еще контент автора

еще контент автора

войдите, чтобы увидеть

и подписаться на интересных профи

в приложении больше возможностей

пока в веб-версии есть не всё — мы вовсю работаем над ней

сетка — cоциальная сеть для нетворкинга от hh.ru

пересекайтесь с теми, кто повлияет на ваш профессиональный путь