powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Ускорение StringBuilder
16 сообщений из 66, страница 3 из 3
Ускорение StringBuilder
    #38942911
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хорошо бы еще пример оптимизации ))) где хотя бы 2-3 кратное ускорение можно выжать )))
...
Рейтинг: 0 / 0
Ускорение StringBuilder
    #38942919
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevХорошо бы еще пример оптимизации ))) где хотя бы 2-3 кратное ускорение можно выжать )))
про 2-3 кратное ускорение:

судя по постам в других потоках и форумах - почти наверно в качестве источника данных у Вади используется Oracle.

на ютубе есть кино от оракл, в котором утверждается буквально следующее:
всякий, кто сел оптимизировать ява-код, в который "из базы приходит N записей в ResultSet", и не добился ускорения в 40000 (по буквам в сорок тысяч раз - 4 порядка с коэффициентом 4) - занялся не своим делом.
Лучше бы посуду на кухне помыл, или пивные бутылки с окурками на мусорку вынес.

Вадя, не знаю, что и как ты там сортировал, но оптимизация твоего кода должна начинаться с танцев вокруг setFetchSize.
А вот продолжаться, в зависимости от проявленного креатива, может в любом понравившемся направлении.

Посмотри это кино.
...
Рейтинг: 0 / 0
Ускорение StringBuilder
    #38942966
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяесть
StringBuilder sf = new StringBuilder(250000);
в цикле он заполняется примерно так
sf.append("лялялялялялялял).append(String)
.append(int)
.append("d gdfgs fhs fghjsfgj fgjg hsdfh swfhwgfjhfjdfgjd ghjdgh")
и т.д.
длина sf может быть различна
максимальная длина заполняется 50мс
можно как-либо ускорить?

форматный вывод пробовал ?
(format)
Может оказаться быстрее... А может и медленнее.
...
Рейтинг: 0 / 0
Ускорение StringBuilder
    #38942967
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsevвадя....
из базы приходит N записей в ResultSet

Сомневаюсь, что в данном случае будет тормозить StringBuilder.


У него наверное в профайлере дофига выполнений этого места кода, и из-за этого он считает, что это -- узкое место.
...
Рейтинг: 0 / 0
Ускорение StringBuilder
    #38943096
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Если в строке StringBuilder sf = new StringBuilder(250000); число 250000 взято с потолка - надо его взять не с потолка, а сразу поставить достаточное для самого неблагоприятного случая, чтобы не было лишних grow-ов с копированиями.
2. использовать серверную jvm
3. по возможности, предпочитать делать мало крупных append-ов, и стараться не делать много мелких.


и еще.
Обычно StringBuilder используется для того чтобы потом создать строку. И не факт, что такие большие строки - это именно то что вам надо. Возможно, следует от этого уйти.


Но это все имеет смысл, если тормозит именно стрингбилдер. 50мс - это, наверное, должен быть очень большой стрингбилдер. Не 250кб - точно. Там скорей всего в цикле делается еще что-то, и тормозит не странгбилдер.
...
Рейтинг: 0 / 0
Ускорение StringBuilder
    #38943100
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chabapokНо это все имеет смысл, если тормозит именно стрингбилдер. 50мс - это, наверное, должен быть очень большой стрингбилдер.
Или очень часто вызываться. Я не понял 50мс - это вызов одного append или все-таки сумарное время всех append?
Если второе, но недавно игрался с небольшой утилиткой, так у меня там в итоге процентов 40% стало уходить на String.format, Number.format и прочее (какой-то format занимал 400мс из 2с). Утилита считывала 2Мб файл с числами и преобразовала в текст по хитрому алгоритму.
...
Рейтинг: 0 / 0
Ускорение StringBuilder
    #38943122
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор3. по возможности, предпочитать делать мало крупных append-ов, и стараться не делать много мелких.
у меня в цикле 64 append
число 250000 взято не с потолка - в конце стоит
System.out.println("sf len " + sf.length());
...
Рейтинг: 0 / 0
Ускорение StringBuilder
    #38943133
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LeonidvchabapokНо это все имеет смысл, если тормозит именно стрингбилдер. 50мс - это, наверное, должен быть очень большой стрингбилдер.
Или очень часто вызываться. Я не понял 50мс - это вызов одного append или все-таки сумарное время всех append?
Если второе, но недавно игрался с небольшой утилиткой, так у меня там в итоге процентов 40% стало уходить на String.format, Number.format и прочее (какой-то format занимал 400мс из 2с). Утилита считывала 2Мб файл с числами и преобразовала в текст по хитрому алгоритму.
Кстати тривиальный String::split(..), String::replaceAll(..) может внезапно вылезти боком. У нас
на проекте их использовали для формирования Rest запроса но оказалось что стреляли
из пушки по маленьким птичкам. Регекспы работают там где мы не ожидали их появления.
Переписываем на апачевские имплементации тех-же split, replace. Чортов Гослинг. Старая
задница. Так испортил фундаметнальный тип.
...
Рейтинг: 0 / 0
Ускорение StringBuilder
    #38944310
Kenny Fartman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevTo All: а почему авторы JRE любят классы делать final? Нафига?Вроде там JVM если видит что класс не будет расширяться может применять свои оптимизации
...
Рейтинг: 0 / 0
Ускорение StringBuilder
    #38944323
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kenny FartmanВроде там JVM если видит что класс не будет расширяться может применять свои оптимизации
Так как все публичные методы являются виртуальными, JVM для final классов может применить оптимизацию и заменить виртуальные вызовы на прямые, которые будут быстрее.
...
Рейтинг: 0 / 0
Ускорение StringBuilder
    #38944370
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev...
To All: а почему авторы JRE любят классы делать final? Нафига?

final метод может быть заинлайнен JIT-ом.
Не "вызов заменен на прямой", а вызов заменен на прямую подстановку тела final метода в точке его вызова.

final - переменные играют роль immutable значений, безопасно используемых в качестве глобальных и автоматически видимых для inner-классов.
...
Рейтинг: 0 / 0
Ускорение StringBuilder
    #38944406
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сиськинfinal метод может быть заинлайнен JIT-ом.
Не "вызов заменен на прямой", а вызов заменен на прямую подстановку тела final метода в точке его вызова.

final - переменные играют роль immutable значений, безопасно используемых в качестве глобальных и автоматически видимых для inner-классов.
Речь идёт о классах, а не методах и полях.
...
Рейтинг: 0 / 0
Ускорение StringBuilder
    #38944629
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kenny FartmanLeonid KudryavtsevTo All: а почему авторы JRE любят классы делать final? Нафига?Вроде там JVM если видит что класс не будет расширяться может применять свои оптимизации

Нет. Оптимизатор работает с загруженными классами, так что ему неважно, объявлен ли класс финальным, или нет.

А по финальности- вопрос скорее в безопасности. По крайней мере так обстоит дело со String.

А где ещё "любят делать"?
...
Рейтинг: 0 / 0
Ускорение StringBuilder
    #38944659
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey TominНет. Оптимизатор работает с загруженными классами, так что ему неважно, объявлен ли класс финальным, или нет.

https://wikis.oracle.com/display/HotSpotInternals/VirtualCalls an invokevirtual bytecode might in fact collapse into the equivalent of an invokestatic bytecode

Alexey TominА по финальности- вопрос скорее в безопасности. По крайней мере так обстоит дело со String.
А где ещё "любят делать"?
Вероятно, речь о StringBuilder.
...
Рейтинг: 0 / 0
Ускорение StringBuilder
    #38944667
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно унаследоваться от AbstractStringBuilder.
...
Рейтинг: 0 / 0
Ускорение StringBuilder
    #38944803
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczAlexey TominНет. Оптимизатор работает с загруженными классами, так что ему неважно, объявлен ли класс финальным, или нет.

https://wikis.oracle.com/display/HotSpotInternals/VirtualCalls an invokevirtual bytecode might in fact collapse into the equivalent of an invokestatic bytecode

О чём и речь- реально это будет, если метод перекрыт один раз, или не перекрыт вообще. Когда один раз- заменяется на if какой-то. Точно не помню, т.к. слышал на стенде у Шипилёва/Куксенко.

BlazkowiczAlexey TominА по финальности- вопрос скорее в безопасности. По крайней мере так обстоит дело со String.
А где ещё "любят делать"?
Вероятно, речь о StringBuilder.

Возможно речь тоже о безопасности. Либо о том, чтобы не думать о возможных наследниках (в вопросах совместимости).
...
Рейтинг: 0 / 0
16 сообщений из 66, страница 3 из 3
Форумы / Java [игнор отключен] [закрыт для гостей] / Ускорение StringBuilder
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]