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

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

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

14 ответов

6 просмотров
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
Можно спросить а вам это зачем? Праздное любопытст...

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

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

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

Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
75
База данных не поможет. Шифрование не поможет. Какие там ещё варианты? Накидывайте.
КТ315
20
А табстоп это сообщение от окна или от элемента управления?
The Bird of Hermes
18
А как лучше конвертировать физический адрес в виртуальный при маппинге? В случае ядра у меня, например, direct mapping, первые 768МБ я как есть мапплю в higher half, а остальн...
Evg Resh
26
Открыл свой двухкилобайтный экзешник в x32dbg, а тут какая-то хрень. Смущает кнопка "выполнить до пользовательского кода", а что ещё может быть в файле помимо него ?
НѣкъиⰘижєжєиꙁъвьсєсвѣтьноѣсѣтиѥсть•
11
Мне были интересны дишные хаки и я нашёл любопытный способ на форуме через __traits, что-то вроде int delegate(int) fac = (int n) => n == 0 ? 1 : n * __traits(parent, {})(n - ...
Constantin F.
1
Вопрос тем кто смотрит видео и слушает подкасты - как вы потом ищете нужную вам информацию? Вот статью я прочитал, потом могу искать нужную мне часть банальным поиском. Пропус...
Aleksandr Druzhinin
4
Всем привет, подскажите/посоветуйте пожалуйста. Фаердак компоненты, имею одно место где бизнес хочет видеть при открытии формы список всех клиентов, это порядка 30к. Мои дово...
Sasha Sch
14
Ребят, если кто в курсе - скажите, а в загранке такое же засилье маркетплейсов? или там простые сермяжные интернет-магазины живут попроще?
Андрей [aharito] Харитонов
14
Коллеги, доброе утро. Запустил на удаленном хосте приложение (ручками зашел туда по ssh и запустил, не командой удаленно). Создал потом ssh-туннель, и с моей машины приложение...
Δημήτηρ
9
Карта сайта