TGViewer
devmark_ru devmark_ru @devmark_ru · 224 subscribers
Post #113 251
С момента своего появления в Java 8 Stream API сделал работу с коллекциями гораздо удобнее. Помимо большого количества утилитарных методов, он разделил все операции над коллекциями на промежуточные и терминальные. Тем самым стримы привнесли также концепцию "ленивых" (отложенных) вычислений. Действительно, зачем обрабатывать миллион элементов исходной коллекции, если заранее известно, что на выходе всегда берутся только два?

Kotlin под капотом использует те же самые java-коллекции, а вот вместо стримов предлагает очень похожую концепцию Sequence.

Поэтому вы наверняка задавались вопросом: надо ли вообще использовать обычные коллекции, если стримы/сиквенсы в теории должны быть более производительными? Этим же вопросом задались авторы доклада Непоследовательные последовательности на Joker 2024. И вот к каким выводам они пришли.

Обычные коллекции на самом деле всегда выигрывают у стримов и сиквенсов, если количество преобразований (например, map) над каждым элементом коллекции меньше 20. Это происходит за счёт инлайнинга компилятором и оптимизаций во время выполнения. Но если у вас в каждом элементе слишком много объектов или если кол-во преобразований больше 20, то инлайнинг перестаёт работать и ленивые вычисления начинают давать заметный профит.

Если же сравнивать между собой стримы и сиквенсы, то последние устроены чуть проще, а потому слегка проигрывают стримам. Происходит это за счёт того, что стримы учитывают некоторые признаки (например, признак сортировки) от предыдущей операции. А потому выполняют чуть меньше преобразований.

А как работаете с коллекциями вы?
Joker 2024. Java-конференция для опытных разработчиков Непоследовательные последовательности: производительность sequence, stream и collection в JVM | Доклад на Joker 2024 Устроим соревнование, измерим и сравним производительность sequence, stream и collection. Вы думаете, все так просто? Как бы не так. Для объяснения некоторых неожиданных закономерностей пришлось прибегнуть к помощи JIT-профайлера и Алексея Шипилёва.
  • 👍 4
  • 🤔 1
More from @devmark_ru
  1. Sep 7, 2026Новый этап автоматизации SDLC от Dockhost! Спустя 3 месяца после появления LLM инференса н…
  2. Jul 16, 2026OpenIDE представила свой клиент для базы данных! На днях вышла новая версия OpenIDE Pro, в…
  3. Jun 30, 2026Channel photo updated
  4. Jun 26, 2026"Товарищ Сталин, что вы курите?" В процессе "общения" с LLM вспомнился один старый номер и…
  5. Jun 15, 2026Вышел стабильный релиз Spring AI 2.0 Чуть больше года назад появился Spring AI версии 1.0,…
  6. May 29, 2026Ваш персональный ChatGPT от Dockhost Продолжаю серию постов про альтернативные LLM, которы…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →