|
|
|
Про String в циклах
|
|||
|---|---|---|---|
|
#18+
как правильнее делать есть цикл, в нем используется стринговская переменная. ей что-то присваивется каждый раз новое, изменянтя и пр. что лучше - эту переменную описать перед циклом? или в цикле описывать, перед первым использованием? или вместо стринг использовать что-то другое? (StringBuffer, StringBuilder) описыват перед циклом и очищать в цикле, или в описывать цикле если цикл идет 1-5 , наверно всё одинаково, тогда с какого количества есть смысл что-то городить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2013, 08:17:49 |
|
||
|
Про String в циклах
|
|||
|---|---|---|---|
|
#18+
StringBuffer ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2013, 08:34:43 |
|
||
|
Про String в циклах
|
|||
|---|---|---|---|
|
#18+
h869311StringBuffer это частичный ответ где лучше описывать? и чем это лучше, ведь надо очищать, перед использованием.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2013, 08:53:14 |
|
||
|
Про String в циклах
|
|||
|---|---|---|---|
|
#18+
Если дело о производительности, то лучше StringBuilder, описать его перед началом цикла, и там же, в начале, выделить достаточно памяти. Дальше в цикле только очищать. В любом случае, очищение будет происходить быстрее создания новой строки в каждом цикле. Это всего лишь изменение поля с длиной строки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2013, 10:10:52 |
|
||
|
Про String в циклах
|
|||
|---|---|---|---|
|
#18+
StringBuilder либо StringBuffer. Код: java 1. 2. 3. 4. Переиспользовать и очищать особого смысла нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2013, 10:15:28 |
|
||
|
Про String в циклах
|
|||
|---|---|---|---|
|
#18+
ей что-то присваивется каждый раз новое, изменянтя и пр.Нужен код. вадячто лучше - эту переменную описать перед циклом? или в цикле описывать, перед первым использованием?Без разницы. описыват перед циклом и очищать в цикле, или в описывать циклеТрудно сказать, скорее всего абсолютно одинаково. Бенчмарки специально не гнял. с какого количества есть смысл что-то городить?Имхо, если меньше 3х конкотинаций, смысла совсем нет. Аналогично. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2013, 10:22:39 |
|
||
|
Про String в циклах
|
|||
|---|---|---|---|
|
#18+
В общем случае, переиспользование объектов ведёт к худшей производительности чем пересоздание. Пересозданый ненужный объект быстро умирает в Eden, а когда допилят Escape Analysis, то будет умирать ещё раньше. Переиспользуемый объект оседает в Tenured. Количество живых объектов в Tenured - основная проблема Java GC. Т.е. при каждой сборке этот объект будет проверятся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2013, 10:33:26 |
|
||
|
Про String в циклах
|
|||
|---|---|---|---|
|
#18+
Пятница? А впрочем, в условиях топика 1-5 циклов, тут все сойдет, разве что StringBuffer явно лишнее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2013, 10:48:28 |
|
||
|
Про String в циклах
|
|||
|---|---|---|---|
|
#18+
Залез в исходник AbstractStringBuilder, ivanra абсолютно прав - лучше чистить и повторно использовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2013, 10:52:07 |
|
||
|
Про String в циклах
|
|||
|---|---|---|---|
|
#18+
ivanraразве что StringBuffer явно лишнее В Java 7 - пофиг. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2013, 10:54:54 |
|
||
|
Про String в циклах
|
|||
|---|---|---|---|
|
#18+
avp.mkЗалез в исходник AbstractStringBuilder, ivanra абсолютно прав - лучше чистить и повторно использовать. Извольте объяснится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2013, 10:55:28 |
|
||
|
Про String в циклах
|
|||
|---|---|---|---|
|
#18+
BlazkowiczИзвольте объяснится. порезаный java.lang.AbstractStringBuilder Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2013, 11:12:05 |
|
||
|
Про String в циклах
|
|||
|---|---|---|---|
|
#18+
Blazkowiczivanraразве что StringBuffer явно лишнееВ Java 7 - пофиг. не первый раз встречаю что в 7 synchronized должно работать быстрее. Но каким образом? Операционка остается та же и процессор тот же. Отказались от системного вызова и реализовали свой? Есть ссылка на официальное сообщение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2013, 11:14:52 |
|
||
|
Про String в циклах
|
|||
|---|---|---|---|
|
#18+
ivanraне первый раз встречаю что в 7 synchronized должно работать быстрее. Но каким образом? Может догадается, что проверки не нужны и выбросит их.. потом) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2013, 11:18:39 |
|
||
|
Про String в циклах
|
|||
|---|---|---|---|
|
#18+
ivanraне первый раз встречаю что в 7 synchronized должно работать быстрее. Наверное потому что я в каждой второй теме про StringBuffer про это пишу. ivanraНо каким образом? Операционка остается та же и процессор тот же. Отказались от системного вызова и реализовали свой? Есть ссылка на официальное сообщение? JVM ассоциирует монитор с первым потоком, который его захватил. Все последующие обращения этого потока к монитору не приводят ни к какой синхронизации вообще. Просто идёт проверка "а это ты - проходи". Это вообще ничего не стоит. А вот если вдруг другой поток подкрадется к монитору, то JVM "насторожится" и начнет использовано полноценный synchronized уже для всех потоков. Поэтому StringBuffer вида сделал и выкинул, от StringBuilder уже почти ни чем не отличается. Конечно, какая-то минимальная, разница есть. Но она на столько мала, что на фоне вызовов методов, и других операций со StringBuilder, она не заметна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2013, 11:26:35 |
|
||
|
Про String в циклах
|
|||
|---|---|---|---|
|
#18+
avp.mkпорезаный java.lang.AbstractStringBuilder Смотреть в исходники я и сам умею. Ткните пальцем почему очищение быстрее пересоздания? Имеется ввиду что что уже будет готов массив заданого размера? Так это изначальным capacity решается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2013, 11:28:12 |
|
||
|
Про String в циклах
|
|||
|---|---|---|---|
|
#18+
вадя, Во-первых, String никогда не изменяется, изменяется только ссылка. Во-вторых, пофигу, что так, что эдак. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2013, 11:44:03 |
|
||
|
Про String в циклах
|
|||
|---|---|---|---|
|
#18+
BlazkowiczИмеется ввиду что что уже будет готов массив заданого размера? Так это изначальным capacity решается. Потому что создание и инициализация массива тоже чего-то стоит. (и времени и памяти). При вызове sb.setLength(0); этого не происходит, только лишь значение поля count становится равным 0. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2013, 11:44:26 |
|
||
|
Про String в циклах
|
|||
|---|---|---|---|
|
#18+
BlazkowiczВ общем случае, переиспользование объектов ведёт к худшей производительности чем пересоздание. Пересозданый ненужный объект быстро умирает в Eden, а когда допилят Escape Analysis, то будет умирать ещё раньше. Переиспользуемый объект оседает в Tenured. Количество живых объектов в Tenured - основная проблема Java GC. Т.е. при каждой сборке этот объект будет проверятся. Очень интересное утверждение. Т.е. если создавать объекты в цикле, занимая все новую и новую память, а сборщик мусора ее будет параллельно очищать, предварительно еще проверив, что на объект нет ссылок. Это будет быстрее, чем писать в одну и ту же область памяти, когда сборка мусора ВООБЩЕ НЕ ТРЕБУЕТСЯ до окончания цикла? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2013, 11:48:01 |
|
||
|
Про String в циклах
|
|||
|---|---|---|---|
|
#18+
avp.mkПотому что создание и инициализация массива тоже чего-то стоит. (и времени и памяти). При вызове sb.setLength(0); этого не происходит, только лишь значение поля count становится равным 0. Эта экономия нивелирутся затратами GC на долгоживущий объект. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2013, 11:50:33 |
|
||
|
Про String в циклах
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, И еще, не подскажете, почему на Android, где как раз очень важна производительность, рекомендуют как раз переиспользовать объекты, а не пересоздавать? allocating memory is always more expensive than not allocating memory ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2013, 11:57:24 |
|
||
|
Про String в циклах
|
|||
|---|---|---|---|
|
#18+
BlazkowiczЭта экономия нивелирутся затратами GC на долгоживущий объект. Правильно ли я понял, что GC проще удалить 100 (1000, 1 000 000, сколько???) короткоживущих объектов, чем 1 долгоживущий? Мы же не сравниваем 1 короткоживущий и 1 долгоживущий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2013, 12:00:21 |
|
||
|
Про String в циклах
|
|||
|---|---|---|---|
|
#18+
HoBTIDИ еще, не подскажете, почему на Android, где как раз очень важна производительность, рекомендуют как раз переиспользовать объекты, а не пересоздавать? allocating memory is always more expensive than not allocating memory Потому что там иначе работает GC. Потому что там программы остро нуждаются в экономии памяти. Т.е. расход памяти там, в итоге, бъет по перфомансу сильнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2013, 12:02:26 |
|
||
|
Про String в циклах
|
|||
|---|---|---|---|
|
#18+
HoBTIDBlazkowicz, И еще, не подскажете, почему на Android, где как раз очень важна производительность, рекомендуют как раз переиспользовать объекты, а не пересоздавать? allocating memory is always more expensive than not allocating memory Ну на Android всё-таки другая VM. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2013, 12:03:42 |
|
||
|
Про String в циклах
|
|||
|---|---|---|---|
|
#18+
HoBTIDчем писать в одну и ту же область памяти, когда сборка мусора ВООБЩЕ НЕ ТРЕБУЕТСЯ до окончания цикла? IMHO. Сборка мусора может потребоваться вне зависимости от цикла (и не один раз). Алгоритм сборки для коротко живущих объектов как раз заточен на то, чтобы не рассматривать не нужные объекты - грубо говоря он пробигает только по нужным и копирует их либо в новое место для коротко живущих либо в место для долго живущих. Если объект переиспользуется это приведет к тому, что в первом случае произойдет примерно один и тот же набор действий (что и создастся новый), а во втором он перелетит в долгоживущий, gc которого потяжеловесней. Если же буфер потом будет использоваться всегда это не страшно. А если высвободится, то вызовет деградацию производительности. Если gc не вызовется в случае перезаписи и вызовется при ее осутствии, то перезапись быстрее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2013, 12:07:38 |
|
||
|
|

start [/forum/search_topic.php?author=lukdiman&author_mode=last_posts&do_search=1]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
get settings: |
12ms |
get forum list: |
18ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
51ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
60ms |
get tp. blocked users: |
2ms |
| others: | 719ms |
| total: | 903ms |

| 0 / 0 |
