золотые правила замеров производительности
Цитата:
Сообщение от
capzap
а не какой то там Лёша
Вы, похоже, думаете, что, если результат получен у вас, то он гораздо точнее и надёжнее того, чем получен у "какого-то" Лёши.
Так не работает. Тот самый Лёша гораздо лучше знает как нужно измерять. Какие инструменты применять, и как проверять догадки.
Этот "какой-то там Лёша" напрямую занимается производительностью сложения строк в Oracle JVM: http://openjdk.java.net/jeps/280
И не просто "что-то там мутит", а результаты его работы напрямую включаются в состав java машины.
И что? К кому мы больше прислушиваемся? К непонятному автору на habr'е, у которого всего три статьи и "про строки" это первая из них?
Или к Лёше, который активно вносит правки в OpenJDK, выступает на конференциях, и пишет статьи?
В Google хотя бы попробуйте: https://www.google.ru/search?q=alexey+shipilev
Хоть по одной ссылке ходили, которую я приводил? (я понимаю, что просмотреть те несколько часов видео адова туча времени, но я специально указывал на нужные моменты)
Цитата:
Сообщение от
capzap
я с ним не знаком и режет слух, когда к отсутствующей третьей стороне так обращаются
А мне, например, режет слух, когда "capzap" или "Валенок" вместо имени.
Конечно, capzap это менее ругательное имя, чем "Валенок", но, блин, чтобы упомянуть второе, и оно не звучало ругательно, нужно очень постараться.
По существу:
Цитата:
http://shipilev.livejournal.com/ : Привет, меня зовут Алексей Шипилёв. В отношении меня можно использовать имена Лёша, Алексей, Лёха, или в крайнем случае, Шипилёв.
Т.е. "Лёша" это первое из обращений, которые Шипилёв сам рекомендует. И рекомендует для всех, а не только для тех, кто "пиво пил".
Цитата:
Сообщение от
capzap
прежде чем дать ссылку я прогнал подобный код через профилировщик и смотрел на время за которое выполняется метод, результат такой же
Не обижайтесь, но так происходит у всех, кто начинает заниматься производительностью.
Я вот не верю, что под профилировщиком вы имели ввиду perf или Solaris Studio Performance Analyzer.
Всё остальное в данном контексте не может дать нужную точность.
Нужная точность в конкретном случае -- ассемблерный код и раскладка по времени на каждую инструкцию.
Т.е. нужно посмотреть в какой машинный код в конечном итоге компилируется builder, в какой buffer и т.п.
Цитата:
Сообщение от
capzap
раз результат получился не в Вашу пользу, значит по Вашему так нельзя делать
Нет. "значит" у вас неверное.
"так нелья делать" не из-за того, что результат не в мою пользу получился. Нельзя делать из-за того, что инструменты для измерения и анализа там неверные.
Попробую привести аналогию: нужно измерить длину провода, но рулетки нет. Зато есть лист А4. Прикладываем его и считаем количество. 297мм же. Можно измерить? Какие проблемы? Зачем брать рулетку? Всем же известно, что 297мм. Умножаем на количество листов и вот она, наша длина провода.
Повторюсь: вы (и автор упомянутой статьи на habr'е) далеко не первые, кто использует неподходящие инструменты для измерения производительности.
Даже эссе есть на эту тему: http://shipilev.net/blog/2015/voltmeter/
Цитата:
Алексей Шипилёв: Порядочное количество диалогов о производительности и её измерении звучит так. Приходит ко мне какой-нибудь Василий и спрашивает:
Вася: Как померить напряжение в розетке?
Я: Возьми вольтметр и измерь.
Вася: Но я не умею в вольтметр, смотри, у меня есть лампочка
Я: Лампочкой напряжение не узнать, возьми вольтметр.
Вася: Ну как же!...
Если вы докажете, что эффект есть, то я без проблем соглашусь. Если вы готовы тратить своё время, я готов помочь в анализе результатов и показать где именно у вас косяк. Но вообще-то, пункт №1 это замена currentTimeMillis на http://openjdk.java.net/projects/code-tools/jmh/
currentTimeMillis==лампочка
code-tools/jmh==вольтметр
Заметьте: я ни разу не говорил, что "нужно всегда использовать buffer". Не говорил и про "нужно всегда использовать builder".
Я говорил лишь про то, что замена buffer на builder (или наоборот) никак не скажется на общей производительности программы.
И, да, я понятия не имею какой код вы изначально называли "говнокодом". Вполне может быть, что это ругательное слово заслужено по праву. Но уж "использование buffer вместо builder" это точно не аргумент называть код говнокодом.
И, да, я не привожу своих замеров не из-за того, что "не умею измерять" или "лень тратить время". На тему buffer vs builder уже есть более авторитетный замер. Я могу повторить его, но какой смысл смотреть на производные, если можно посмотреть на оригинал?