TGViewer
Kotlin Kotlin @kotlin_lib · 2.05K subscribers
Post #673 705
🚀 Sequence не всегда быстрее. Разрушаем мифы оптимизации

Каждый Kotlin-разработчик знает мантру: "Если цепочка операторов длинная, бери Sequence, чтобы избежать промежуточных коллекций".

Это правда. Но часто на код-ревью я вижу asSequence() на списках из 50-100 элементов. И вот тут начинается оверхед, о котором забывают.

В чем подвох?

Операторы над Iterable (map, filter) - это inline functions.
Когда вы пишете list.filter { ... }, компилятор фактически вставляет код цикла for прямо в место вызова. JIT это обожает, процессор счастлив, аллокаций минимум (кроме результирующего списка).

Операторы над Sequence, это создание объектов.
Вызов .map { ... } создает новый инстанс TransformingSequence. Вызов .filter { ... } - FilteringSequence.
Это цепочка объектов-декораторов. Каждый элемент протаскивается через виртуальные вызовы next().

📉 Бенчмарки (JMH, List vs Sequence):

Допустим, у нас простая цепочка: filter + map + first.

1. Маленький список (10-100 элементов):
🔵Iterable: Быстрее в 1.5 - 2 раза.
🔵Причина: создание объектов-оберток для Sequence стоит дороже, чем тупой проход циклом и создание мелких промежуточных ArrayList'ов.


2. Средний список (~1 000 элементов):
🔵Паритет. Разница становится невидимой.


3. Гигантский список (100k+ элементов) или тяжелые операции:
🔵Sequence: Win. Здесь ленивость спасает от OutOfMemory и лишней работы.



💡 Не ставьте asSequence() по дефолту везде.

1. Если коллекция маленькая (помещается на экран телефона) - Iterable.
2. Если вы делаете map, а потом сразу toList() - Iterable (Sequence тут просто лишний посредник).
3. Если стриминг данных, чтение файла построчно или поиск первого совпадения в огромном массиве - Sequence.

Оптимизация должна быть осознанной, а не рефлекторной.

А вы используете Sequence по дефолту или только там, где профайлер подсветил? 👇

✍️ @kotlin_lib
  • ❤ 4
  • 👍 2
More from @kotlin_lib
  1. Aug 26, 2026🚧 Ваш Mutex тормозит корутины. Как перестать лочить и начать жить Вы пишете многопоточный…
  2. Jul 25, 2026🚀 Подборка полезных IT каналов в Max Системное администрирование, DevOps 📌 https://max.r…
  3. Jul 1, 2026🌪 Ваша дата в опасности: flatMapConcat vs Merge vs Latest Вам нужно взять поток ID-шников…
  4. Jun 24, 2026🤖 Android-приложение — это не только красивый экран. За ним стоят работа с внешним API, з…
  5. Jun 23, 2026🔮 Убийца бойлерплейта: Встречайте Context Parameters (Kotlin 2.x) Мы так привыкли к Depen…
  6. Jun 3, 2026Яндекс обновил Yandex Mobile Ads SDK для монетизации мобильных приложений — и это интересн…
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 →