Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 20

Тема: StringBuilder или StringBuffer

  1. #1

    По умолчанию 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 запускам.
    Последний раз редактировалось Владимир Ситников; 29.01.2016 в 23:03.

  2. #2

    По умолчанию

    Понятно уже всем, что ребята Вы умные, программируете с пеленок.
    Любым пиндосам нос утрете, если друг друга перед этим не съедите.
    Зачем же здесь на форуме Овен?

    Есть еще хороший форум, более в тему - http://www.cyberforum.ru
    +79104444236
    С уважением,
    Лапшин Вячеслав

  3. #3
    Пользователь Аватар для rovki
    Регистрация
    03.01.2010
    Адрес
    Чехов
    Сообщений
    12,121

    По умолчанию

    А так всегда -на новичков накидываются (дедовщина) .Выстоял -значит свой,проходи ...Особенно когда кто нибудь не ординарное предлагает ,тут желающих пнуть много найдется
    Очень приятно ,что молодежь такая грамотная пошла(я про vladimirisitnikov) ,умеет не только программы писать ,но и четко ,по полочкам излагать свои мысли ..
    Последний раз редактировалось rovki; 29.01.2016 в 22:57.
    электронщик до мозга костей и не только

  4. #4

    По умолчанию

    Цитата Сообщение от rovki Посмотреть сообщение
    А так всегда -на новичков накидываются
    То, что "напряжение нужно измерять вольтметром" это "накидываются", "дедовщина"?
    Или имелось ввиду про "накинулись на АСУ ТП в облаке"?
    Последний раз редактировалось Владимир Ситников; 29.01.2016 в 22:42.

  5. #5
    Пользователь Аватар для rovki
    Регистрация
    03.01.2010
    Адрес
    Чехов
    Сообщений
    12,121

    По умолчанию

    Цитата Сообщение от vladimirisitnikov Посмотреть сообщение
    То, что "напряжение нужно измерять вольтметром" это "накидываются", "дедовщина"?
    Или имелось ввиду про "накинулись на АСУ ТП в облаке"?
    Ну да ....вроде началось с этого ,а потом понеслось ...
    Последний раз редактировалось rovki; 29.01.2016 в 22:55.
    электронщик до мозга костей и не только

  6. #6
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,243

    По умолчанию

    зайду по другому, есть исходники этих классов, первое они все расширяют класс AbstractStringBuilder, ну тут оппоненту это ни о чем не скажет, подумаешь название совпало
    StringBuffer и его два из ... методов
    Код:
    @Override
        public synchronized StringBuffer append(String str) {
            toStringCache = null;
            super.append(str);
            return this;
        }
    @Override
        public synchronized int length() {
            return count;
        }
    StringBuilder и его два из ... методов
    Код:
    @Override
        public StringBuilder append(String str) {
            super.append(str);
            return this;
        }
    @Override
        public int length() {
            return count;
        }
    кроме того в StringBuilder есть append StringBuffer, в StringBuffer есть добавление только абстрактного AbstractStringBuilder

    как видно заканчивается всё тем, что выполняется метод родителя один на всех с идентичным кодом, в этом плане равенство выполнения по времени одинаково, остается только одна дополнительная инструкция нуления, плюсом затраты на синхронизацию если понадобится. Я не знаю какая магия ускоряет класс с большим количеством инструкций тем более что бенчмарк не методы класса тестирует, а функцию нашего класса где используются билдер и буффер, поэтому продолжу верить своим способам проверки работы моего приложения, рекомендациям API
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  7. #7

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    Я не знаю какая магия ускоряет класс с большим количеством инструкций
    Так ради этого java машинами и занимались 20 лет.
    Не магия это, а JIT компиляция.

    Цитата Сообщение от capzap Посмотреть сообщение
    поэтому продолжу верить своим способам проверки работы моего приложения, рекомендациям API
    У меня один вопрос: других не будете тыкать за "использование buffer вместо builder"?

  8. #8

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    зайду по другому, есть исходники этих классов,
    Этот заход уже на порядок лучше, но смотреть нужно глубже.

    Цитата Сообщение от capzap Посмотреть сообщение
    в этом плане равенство выполнения по времени одинаково, остается только одна дополнительная инструкция нуления, плюсом затраты на синхронизацию если понадобится.
    Именно из-за этого я и говорил, что нужно смотреть на ассемблерный код. Тут потенциальная разница всего в пару инструкций (если она вообще есть).
    Частота процессора порядка 3ГГц, т.е. 3'000'000'000 инструкций. Вы тут сами говорите "одна дополнительная инструкция нуления", а процессор таких миллиарды в секунду сделать может.

  9. #9

    По умолчанию

    Самое забавное во всей этой истории то, что я вообще не знаю откуда взялся этот кусок кода, который привел capzap (кстати, скрин куда то пропал). Я для блютуса вообще никогда код не писал)))
    Уважаемый capzap, не поделитесь, откуда взялся этот кусок кода?
    С уважением,
    Владимир
    vmsystems.ru

  10. #10

    По умолчанию

    Цитата Сообщение от Миних В.А. Посмотреть сообщение
    Самое забавное во всей этой истории то, что я вообще не знаю откуда взялся этот кусок кода, который привел capzap (кстати, скрин куда то пропал). Я для блютуса вообще никогда код не писал)))
    Уважаемый capzap, не поделитесь, откуда взялся этот кусок кода?
    Тот пример был только для того, чтобы показать, что NetBeans рекомендует-таки, что "StringBuffer можно заменить на StringBuilder".

Страница 1 из 2 12 ПоследняяПоследняя

Похожие темы

  1. HiperTerminal или ...
    от Илья Кареткин в разделе Сетевые технологии
    Ответов: 16
    Последнее сообщение: 15.07.2016, 23:27
  2. Ответов: 3
    Последнее сообщение: 20.02.2016, 16:29
  3. выходы Р или К?
    от service в разделе ПЛК1хх
    Ответов: 9
    Последнее сообщение: 11.12.2012, 14:38
  4. Ответов: 8
    Последнее сообщение: 04.04.2011, 15:38
  5. ПЛК150 или ПЛК63?
    от alex241 в разделе Подбор Оборудования
    Ответов: 3
    Последнее сообщение: 28.01.2010, 12:44

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •