Pull to refresh

Comments 16

1. Забудьте про конкатенацию строк — используйте StringBuilder

Если речь не идёт про цикл, то оптимизатор сам из конкатенации сделает StringBuilder.

А вот у LinkedList или сложных абстракций — это может быть дорогой операцией.

У LinkedList это переменная, которая просто возращается

Типичные виновники:

  • static HashMap, который никогда не очищает записи;

Это в каком финтех-стартапе такое типично используется?

Пункты 2 и 7. Почти никто не использует LinkedList...

Хуже, это Rasathurai Karan.

Интересно, вообще из какого года эти советы

Вместо ручного управления блокировками используйте ConcurrentHashMap — он уже оптимизирован для многопоточности.

Очень вредный совет. Шаг вправо, шаг влево - попытка к бегству со всеми вытекающими. Что если, например, 2 параметра одновременно изменить надо? Осваивайте блокировки и Java Memory Model. Это база. Без понимания этих инструментов работа с многопоточностью гарантированно обернётся катастрофой.

индексы: если WHERE медленный, значит, не хватает индекса

И сразу следом:

Профилируйте без пощады - догадки для дилетантов

Несостыковочка

Какие-то советы для начинающих индусов из года примерно 2010. Блог компании OTUS, наш девиз "похер на качество контента, мы берём количеством".

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

Не нужно size() выносить в переменную, компилятор это оптимизирует сам.

Вроде история со сложением строк уже давно не актуальна, компилятор достаточно умён чтобы заменить ее на билдер "под капотом".

Когда увидел название статьи, то обрадовался: освежу в памяти нужную тему. Разочарование подкралось незаметно..

Присоединяюсь к комментаторам выше и допишу свою мысль:
-- Используйте флаг -XX:+UseG1GC

Давно уже по умолчанию используется G1 (еще с 10 версии). Не так много проектов осталось на 8ке. Но если остались, то там именно этой оптимизации не хватает! Как и некоторые другие примеры, этот более теоретический. Сколько у людей спрашивал, большинство вообще не знает настройки хипа и других параметров jvm на проде, не то что установка какого-то кастомного GC.

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

Если код будет признан горячим, jit компилятор должен и так убрать повторные вызовы .size().

Сложение строк тоже давным давно превращается в билдер на уровне javac.

К библиотекам от апач тоже много вопросов из-за их любимых транзитивных зависимостей - джарник потом весит сотни метров.

И полностью отказаться от блокировок в пользу concurrent hash map в общем случае довольно сложно.

Надеюсь этот пост это стеб, а не реальный пост?
1. Забудьте про конкатенацию строк — используйте StringBuilder - Java уже давным давно умеет разрешать автоматически конкатенацию строк
str += i; будет работать также быстро, как и StringBuilder
2. Циклы: тихий убийца производительности
Просто откройте реализацию метода size у LinkedList, там просто возвращается сохраненное значение size

По остальным пунктам тоже, чистая вода, никакой реальной идеи

LinkedList.size() вернётся за O(1).
И вообще, перестаньте его уже использовать. Он даёт профит только при добавлении/удалении из начала списка и даже не до середины. O(n) время итерации до удаляемого элемента даёт о себе знать, это только сама операция замены указателей константная.

В целом статья информативная. Мне, как +- опытному джависту хватило оглавления - все "техники" понятны и известны, их просто обобщили. Для новичков понадобится читать статью почти полностью)

В мире, где миллисекунды стоят миллионы - java обычно не используется.

Я понимаю, ваша цель - ненавязчивая реклама. Но может не стоит все подряд переводить? Это реальная дешевка. Насколько разумно, что с вашим брендом ассоциируется такое вот?

Sign up to leave a comment.