|
|
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
Хорошо бы еще пример оптимизации ))) где хотя бы 2-3 кратное ускорение можно выжать ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2015, 18:34 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevХорошо бы еще пример оптимизации ))) где хотя бы 2-3 кратное ускорение можно выжать ))) про 2-3 кратное ускорение: судя по постам в других потоках и форумах - почти наверно в качестве источника данных у Вади используется Oracle. на ютубе есть кино от оракл, в котором утверждается буквально следующее: всякий, кто сел оптимизировать ява-код, в который "из базы приходит N записей в ResultSet", и не добился ускорения в 40000 (по буквам в сорок тысяч раз - 4 порядка с коэффициентом 4) - занялся не своим делом. Лучше бы посуду на кухне помыл, или пивные бутылки с окурками на мусорку вынес. Вадя, не знаю, что и как ты там сортировал, но оптимизация твоего кода должна начинаться с танцев вокруг setFetchSize. А вот продолжаться, в зависимости от проявленного креатива, может в любом понравившемся направлении. Посмотри это кино. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2015, 18:54 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
вадяесть StringBuilder sf = new StringBuilder(250000); в цикле он заполняется примерно так sf.append("лялялялялялялял).append(String) .append(int) .append("d gdfgs fhs fghjsfgj fgjg hsdfh swfhwgfjhfjdfgjd ghjdgh") и т.д. длина sf может быть различна максимальная длина заполняется 50мс можно как-либо ускорить? форматный вывод пробовал ? (format) Может оказаться быстрее... А может и медленнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2015, 20:09 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsevвадя.... из базы приходит N записей в ResultSet Сомневаюсь, что в данном случае будет тормозить StringBuilder. У него наверное в профайлере дофига выполнений этого места кода, и из-за этого он считает, что это -- узкое место. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2015, 20:11 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
1. Если в строке StringBuilder sf = new StringBuilder(250000); число 250000 взято с потолка - надо его взять не с потолка, а сразу поставить достаточное для самого неблагоприятного случая, чтобы не было лишних grow-ов с копированиями. 2. использовать серверную jvm 3. по возможности, предпочитать делать мало крупных append-ов, и стараться не делать много мелких. и еще. Обычно StringBuilder используется для того чтобы потом создать строку. И не факт, что такие большие строки - это именно то что вам надо. Возможно, следует от этого уйти. Но это все имеет смысл, если тормозит именно стрингбилдер. 50мс - это, наверное, должен быть очень большой стрингбилдер. Не 250кб - точно. Там скорей всего в цикле делается еще что-то, и тормозит не странгбилдер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2015, 00:45 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
chabapokНо это все имеет смысл, если тормозит именно стрингбилдер. 50мс - это, наверное, должен быть очень большой стрингбилдер. Или очень часто вызываться. Я не понял 50мс - это вызов одного append или все-таки сумарное время всех append? Если второе, но недавно игрался с небольшой утилиткой, так у меня там в итоге процентов 40% стало уходить на String.format, Number.format и прочее (какой-то format занимал 400мс из 2с). Утилита считывала 2Мб файл с числами и преобразовала в текст по хитрому алгоритму. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2015, 01:39 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
автор3. по возможности, предпочитать делать мало крупных append-ов, и стараться не делать много мелких. у меня в цикле 64 append число 250000 взято не с потолка - в конце стоит System.out.println("sf len " + sf.length()); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2015, 06:14 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
LeonidvchabapokНо это все имеет смысл, если тормозит именно стрингбилдер. 50мс - это, наверное, должен быть очень большой стрингбилдер. Или очень часто вызываться. Я не понял 50мс - это вызов одного append или все-таки сумарное время всех append? Если второе, но недавно игрался с небольшой утилиткой, так у меня там в итоге процентов 40% стало уходить на String.format, Number.format и прочее (какой-то format занимал 400мс из 2с). Утилита считывала 2Мб файл с числами и преобразовала в текст по хитрому алгоритму. Кстати тривиальный String::split(..), String::replaceAll(..) может внезапно вылезти боком. У нас на проекте их использовали для формирования Rest запроса но оказалось что стреляли из пушки по маленьким птичкам. Регекспы работают там где мы не ожидали их появления. Переписываем на апачевские имплементации тех-же split, replace. Чортов Гослинг. Старая задница. Так испортил фундаметнальный тип. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2015, 07:57 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevTo All: а почему авторы JRE любят классы делать final? Нафига?Вроде там JVM если видит что класс не будет расширяться может применять свои оптимизации ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 11:21 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
Kenny FartmanВроде там JVM если видит что класс не будет расширяться может применять свои оптимизации Так как все публичные методы являются виртуальными, JVM для final классов может применить оптимизацию и заменить виртуальные вызовы на прямые, которые будут быстрее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 11:31 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsev... To All: а почему авторы JRE любят классы делать final? Нафига? final метод может быть заинлайнен JIT-ом. Не "вызов заменен на прямой", а вызов заменен на прямую подстановку тела final метода в точке его вызова. final - переменные играют роль immutable значений, безопасно используемых в качестве глобальных и автоматически видимых для inner-классов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 11:56 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
Сиськинfinal метод может быть заинлайнен JIT-ом. Не "вызов заменен на прямой", а вызов заменен на прямую подстановку тела final метода в точке его вызова. final - переменные играют роль immutable значений, безопасно используемых в качестве глобальных и автоматически видимых для inner-классов. Речь идёт о классах, а не методах и полях. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 12:12 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
Kenny FartmanLeonid KudryavtsevTo All: а почему авторы JRE любят классы делать final? Нафига?Вроде там JVM если видит что класс не будет расширяться может применять свои оптимизации Нет. Оптимизатор работает с загруженными классами, так что ему неважно, объявлен ли класс финальным, или нет. А по финальности- вопрос скорее в безопасности. По крайней мере так обстоит дело со String. А где ещё "любят делать"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 14:29 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 14:46 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
Можно унаследоваться от AbstractStringBuilder. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 14:49 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
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. Возможно речь тоже о безопасности. Либо о том, чтобы не думать о возможных наследниках (в вопросах совместимости). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 16:30 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38942966&tid=2125503]: |
0ms |
get settings: |
5ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
156ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 215ms |
| total: | 451ms |

| 0 / 0 |
