лямбды в котлине - создается новый объект?
https://www.youtube.com/watch?v=wAQCs8-a6mg
Что из себя представляет этот объект?
может есть какие статьи на эту тему.
Потому что в терминах JVM нет понятия "функция", есть только понятие "метод". Поэтому чтобы куда-то передать функцию, надо создать объект, который содержит этот метод. Впрочем, использовать инлайны только для оптимизации этой аллокации очень не рекомендуется
почему не рекомендуется? ведь это прямо таки рекомендуют на оффсайте языка
https://kotlinlang.org/docs/inline-functions.html
Тут нет рекомендации его использовать. Сказано, что можно убрать аллокацию. Но во-первых, JVM и так ее обычно убирает (не уверен про андроид), во-вторых, вы при этом сильно усложняете работу родного инлайнера и раздуваете байткод
А разве метод не кладется в стек? на сколько я знаю обычные функции кладутся в стек, лямбда получается только через объект? а соответственно когда пишем inline -она идет в стек? верно мыслю?
В стек кладутся переменные а не методы и понятие стэка в JVM несколько размыто.
Я начинающий и пытаюсь активно найти правду среди кучи теории из разных статей. Что скажете про информацию в следующей статье: https://javadevblog.com/chto-takoe-heap-i-stack-pamyat-v-java.html#:~:text=Java%20Heap%20(%D0%BA%D1%83%D1%87%D0%B0)%20%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D1%83%D0%B5%D1%82%D1%81%D1%8F%20Java,%D0%BF%D0%BE%D0%B4%20%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D1%8B%20%D0%B8%20JRE%20%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D1%8B.&text=%D0%97%D0%B4%D0%B5%D1%81%D1%8C%20%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%D0%B5%D1%82%20%D1%81%D0%B1%D0%BE%D1%80%D1%89%D0%B8%D0%BA%20%D0%BC%D1%83%D1%81%D0%BE%D1%80%D0%B0%3A%20%D0%BE%D1%81%D0%B2%D0%BE%D0%B1%D0%BE%D0%B6%D0%B4%D0%B0%D0%B5%D1%82,%D1%81%D1%81%D1%8B%D0%BB%D0%B0%D1%82%D1%8C%D1%81%D1%8F%20%D1%81%20%D0%BB%D1%8E%D0%B1%D0%BE%D0%B9%20%D1%87%D0%B0%D1%81%D1%82%D0%B8%20%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F.
Если вы начинающий, не используйте инлайны кроме случаев реификации
Примерно так, но что именно JVM помещает в стэк, а что в кучу, она решает на ходу
кстати про рефайнинг. зачем мне гемориться с рефанингом, если я могу определить тип данных в дженерике гораpдо проще через приведение типов - is
дженерики стираются в рантайме по умолчанию, reified позволяет получить тип дженерика в рантайме
Потому что дженерики вы таким образом проверить не можете
спасибо большое за ответ.
К сожалению данное утверждение ошибочно, тип дженериков можно проверить через is. вчера собрал обычное консольное приложение и через is в рантайме определил тип джененрика.
В общем случае нельзя. Есть несколько исключений, когда можно, но это именно что исключения
смотрите, никаких проблем скастить дженерик к чему угодно
Обсуждают сегодня