170 похожих чатов

Привет Читаю сейчас статью, про то как работают лямбды. Я правильно

понимаю, что когда мы в первый раз вызываем лямбду то для нее в хипе генерируется объект CallSite со статическим методом, а потом просто вызывается этот метод?

14 ответов

13 просмотров
Anton-Sorokin Автор вопроса

Эх, @Tagir_Valeev 100% знает, но его почему то тут нет(

Anton Sorokin
Эх, @Tagir_Valeev 100% знает, но его почему то тут...

щас бы Тагира дергать на такого уровня вопросы как кодировку менять , а дальше что - как шрифты менять ? )

Anton-Sorokin Автор вопроса
Artjom Kalita
щас бы Тагира дергать на такого уровня вопросы как...

Да, даже если и шрифты. В падлу ответить что ли?

Anton-Sorokin Автор вопроса
Alexander Komarov
вообще есть, и даже отвечает

хм, проверил по списку юзеров - да, есть. Но когда в сообщении набираешь его ник то никого не находит

Anton-Sorokin Автор вопроса

потому что я смотрю stackoverflow и вижу такое сообщение: В первом случае, лямбда-выражения просто превращаются в статический метод, имеющий точно такую ​​же сигнатуру лямбда-выражения, и объявляются в том же классе, где используется лямбда-выражение. Например, лямбда-выражение, объявленное в классе Lambda выше, может быть преобразовано в метод, подобный этому И немного путаюсь. Зачем тогда CallSite объект нужен?

Anton-Sorokin Автор вопроса

хм, читая статью возник вопрос. В самом первом примере кода создается метод в котором находится логика лямбды, и используется CallSite объект чтобы этот метод вызвать. Зачем использовать CallSite объект, если такой метод уже создан, и мы можем просто вызвать его?

Anton Sorokin
хм, читая статью возник вопрос. В самом первом при...

A CallSite is a holder for a variable MethodHandle, which is called its target. An invokedynamic instruction linked to a CallSite delegates all calls to the site's current target. A CallSite may be associated with several invokedynamic instructions, or it may be "free floating", associated with none. In any case, it may be invoked through an associated method handle called its dynamic invoker.

Anton Sorokin
хм, читая статью возник вопрос. В самом первом при...

Потому что в общем виде целевой MethodHandle (MH) можно положить в MutableCallSite и менять его на лету, давая рантайму переоптимизировать. Для лямбд это не важно, потому что целевой MH там лежит в ConstantCallSite (CCS). JIT-компилятор, увидя слинкованный CCS, тупо найдёт там целевой MH, и заинлайнит сквозь него.

Нет, инстанс метод. Лямбда же интерфейс реализует. Вот соответствующий метод этого интерфейса

CallSite - это просто ссылка на метод хэндл. В lambda metafactory используются только ConstantCallSite. Если лямбда не имеет состояния, то создаётся один константный объект анонимного класса и создаётся константный метод хэндл, типа геттера, который всегда возвращает этот самый объект

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

Anton-Sorokin Автор вопроса
Artem Sokolov
Можно спросить а вам это зачем? Праздное любопытст...

да нет, конечно для расширения кругозора

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

Обсуждают сегодня

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Карта сайта