StringBuilder или StringBuffer
Внезапно поднялась тема про профилирование java.
Предыстория тут: http://www.owen.ru/forum/showthread....l=1#post194543
Краткий перессказ тут: http://shipilev.net/blog/2015/voltmeter/
jmh: http://openjdk.java.net/projects/code-tools/jmh/
Цитата:
Сообщение от
capzap
Гы, только обратил внимание, Вас на столько раздражает, что я ни принимаю jmh
Да. Без jmh замеры невозможны.
Цитата:
Сообщение от
capzap
что в одном посте Вы меня учите кому чем не тыкать
Именно. Темой "StringBuilder vs StringBuffer" не тыкайте, пожалуйста.
TON'ом, PID'ом или ещё чем -- совсем другой вопрос.
Цитата:
Сообщение от
capzap
а в другом намекаете что я пишу убожество? Меня вполне устраивает, что нет желтых подчеркиваний, findbugs не ругается
Нет, не намекаю.
Мои слова: "замер без jmh -- порнография". Остальное не обсуждалось и не подразумевалось. Да, я тоже за код без жёлтых подчёркиваний.
Но вот замерять что-то без JMH -- извольте.
Цитата:
Сообщение от
capzap
когда есть варианты реализации пробую все через профилировщик
Профилировщик -- хорошо. Но сначала нужно тест на JMH, а потом уже профилировать.
Обратный порядок неверен.
Цитата:
Сообщение от
capzap
добавлял -verbose:gc -Xms2g -Xmx2g помогло только StringBuffer улучшить скорость выполнения
Вот видите, это подтверждает то, что конкретный бенчмарк упирается не только в код классов Buffer/Builder, но и в сборку мусора.
Цитата:
Сообщение от
capzap
и по поводу приведенного примера бенчмарка, слова Fork я так понимаю это что то связано с асинхронным выполнением задач, другими словами несколько потоков где преимущество имеет StringBuffer, может по этому он вровень идет
Нет, тут всё синхронно и ровно в один поток.
@Fork(3) заставляет jmh выполнять тест 3 раза. При этом для каждого теста java машина запускается 3 раза.
Это нужно для того, чтобы исключить случаи, когда "от запуска к запуску самой java машины" меняется результат. Такое бывает.
Если посмотрите логи, выполнений, то там видно, что каждый из тестов запускался 3*10*2=60 раз.
1-ый запуск jvm: 10 прогревочных запусков (они отбрасываются), 10 измерительных (по ним усредняем)
2-ый запуск jvm: 10 прогревочных запусков (они отбрасываются), 10 измерительных (по ним усредняем)
3-ий запуск jvm: 10 прогревочных запусков (они отбрасываются), 10 измерительных (по ним усредняем)
Т.е. итоговый результат -- усреднение по 30 запускам.