|
|
|
Что быстрее + или StringBuffer?
|
|||
|---|---|---|---|
|
#18+
Что должно быстрее отработать: Код: plaintext 1. 2. Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2006, 16:19:06 |
|
||
|
Что быстрее + или StringBuffer?
|
|||
|---|---|---|---|
|
#18+
А самому проверить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2006, 16:33:13 |
|
||
|
Что быстрее + или StringBuffer?
|
|||
|---|---|---|---|
|
#18+
Не заметишь разницу в таком тесте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2006, 16:37:46 |
|
||
|
Что быстрее + или StringBuffer?
|
|||
|---|---|---|---|
|
#18+
TimmНе заметишь разницу в таком тесте. В конкретно таком - естественно. Лучше использовать более простой способ - с String. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2006, 16:38:31 |
|
||
|
Что быстрее + или StringBuffer?
|
|||
|---|---|---|---|
|
#18+
Итерация в 100000 циклов дает более интересный результат. В принципе, ожидаемый. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2006, 16:39:06 |
|
||
|
Что быстрее + или StringBuffer?
|
|||
|---|---|---|---|
|
#18+
Так какой результат ожидаемый? Это теоретический вопрос, а не практический. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2006, 16:42:52 |
|
||
|
Что быстрее + или StringBuffer?
|
|||
|---|---|---|---|
|
#18+
LeonidvТак какой результат ожидаемый? Это теоретический вопрос, а не практический. теоретически это практический вопрос, поэтому х его з. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2006, 17:18:26 |
|
||
|
Что быстрее + или StringBuffer?
|
|||
|---|---|---|---|
|
#18+
LeonidvТак какой результат ожидаемый? Это теоретический вопрос, а не практический. Теоретический вопрос - это что отрабатывает быстрее: s = s + "VALUE"; strbuf.append("VALUE"); на произвольном (большом) числе итераций. Однозначно - append. Причем понятно - почему. В вашем примере я не вижу теоретического вопроса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2006, 17:20:10 |
|
||
|
Что быстрее + или StringBuffer?
|
|||
|---|---|---|---|
|
#18+
Вот набросал тут примерчик: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. Показывает одно и то же время и расход памяти для обоих методов: Код: plaintext 1. 2. 3. 4. 5. 6. 7. Если смотреть грубо на код, то метод с String делает в итоге следующее(операции присваивания опускаем): 1. создаст три строковых объекта в строковом буфере. 2. При этом выполнит два раза операцию конкатенации строк. 3. Инициализирует экземпляр класса String. Метод с StringBuilder: 1. создаст три строковых объекта в буфере. 2. инициализирует экземпляр StringBuilder. 3. Сделает два раза конкатенацию 4. Выполнит метод toString(); Итого: StringBuilder выполняет "лишний раз" метод toString(). Насколько это замедляет резальтат, зависит от внутренней реализации. Практика показывает, что время на эту операцию по крайней мере пренебрежимо мало по сравнению с временем на остальные операции. Имхо, данный тест не показывает разницы между String и StringBuffer. он же Теоретический вопрос - это что отрабатывает быстрее: s = s + "VALUE"; strbuf.append("VALUE"); на произвольном (большом) числе итераций. Однозначно - append. Причем понятно - почему. Коллега, а почему? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2006, 17:23:31 |
|
||
|
Что быстрее + или StringBuffer?
|
|||
|---|---|---|---|
|
#18+
Не надо перевирать вопрос. Так вы его поставили, ответ очевиден. Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2006, 17:24:25 |
|
||
|
Что быстрее + или StringBuffer?
|
|||
|---|---|---|---|
|
#18+
Feech, я согласен с вами. Вот, нашел в JSL JSL An implementation may choose to perform conversion and concatenation in one step to avoid creating and then discarding an intermediate String object. To increase the performance of repeated string concatenation, a Java compiler may use the StringBuffer class or a similar technique to reduce the number of intermediate String objects that are created by evaluation of an expression. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2006, 17:28:39 |
|
||
|
Что быстрее + или StringBuffer?
|
|||
|---|---|---|---|
|
#18+
примерно год назад здесь обсуждали это. кто-то тогда сказал, что оптимизатор в байт-код отправит конструкцию со StringBuffer, даже если написать "SS"+"qq". в качестве доказательства приводил байт-код классов. или 2 года назад, не помню уже. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2006, 17:28:42 |
|
||
|
Что быстрее + или StringBuffer?
|
|||
|---|---|---|---|
|
#18+
Deady примерно год назад здесь обсуждали это. кто-то тогда сказал, что оптимизатор в байт-код отправит конструкцию со StringBuffer, даже если написать "SS"+"qq". в качестве доказательства приводил байт-код классов. или 2 года назад, не помню уже. Posted via ActualForum NNTP Server 1.3 зависит от версии JVM. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2006, 17:30:59 |
|
||
|
Что быстрее + или StringBuffer?
|
|||
|---|---|---|---|
|
#18+
Feech Имхо, данный тест не показывает разницы между String и StringBuffer. см. он же В конкретно таком - естественно. Лучше использовать более простой способ - с String. и он же Итерация в 100000 циклов дает более интересный результат. В принципе, ожидаемый. он же Теоретический вопрос - это что отрабатывает быстрее: s = s + "VALUE"; strbuf.append("VALUE"); на произвольном (большом) числе итераций. Однозначно - append. Причем понятно - почему. Коллега, а почему? А вы попробуйте провести такой тест: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. Вот это и будет ответ на приведенный мной теоретический вопрос: он же что отрабатывает быстрее: s = s + "VALUE"; strbuf.append("VALUE"); на произвольном (большом) числе итераций. Однозначно - append. Причем понятно - почему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2006, 17:33:43 |
|
||
|
Что быстрее + или StringBuffer?
|
|||
|---|---|---|---|
|
#18+
Deady примерно год назад здесь обсуждали это. кто-то тогда сказал, что оптимизатор в байт-код отправит конструкцию со StringBuffer, даже если написать "SS"+"qq". в качестве доказательства приводил байт-код классов. или 2 года назад, не помню уже. Posted via ActualForum NNTP Server 1.3 Это конкретная ситуация описанная автором. Что будет на самом деле происходить - нужно исследовать. Зависит от версии JVM. String = "a" + "b" он действительно переводит в StringBuffer (1.5). И это ответ почему в первом тесте у нас не было разницы в производительности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2006, 17:35:06 |
|
||
|
Что быстрее + или StringBuffer?
|
|||
|---|---|---|---|
|
#18+
Feech Кстати, моем тесте не указывайте число итераций больше 10000 - конкатенация строк умирает :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2006, 17:45:22 |
|
||
|
Что быстрее + или StringBuffer?
|
|||
|---|---|---|---|
|
#18+
он же А вы попробуйте провести такой тест: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. Вот это и будет ответ на приведенный мной теоретический вопрос: он же что отрабатывает быстрее: s = s + "VALUE"; strbuf.append("VALUE"); на произвольном (большом) числе итераций. Однозначно - append. Причем понятно - почему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2006, 17:47:46 |
|
||
|
Что быстрее + или StringBuffer?
|
|||
|---|---|---|---|
|
#18+
он же А вы попробуйте провести такой тест: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. Вот это и будет ответ на приведенный мной теоретический вопрос: он же что отрабатывает быстрее: s = s + "VALUE"; strbuf.append("VALUE"); на произвольном (большом) числе итераций. Однозначно - append. Причем понятно - почему. (Сорри, промахнулся) Я и без теста верю, мне интересно почему. Ноги растут из того факта, что строки immutable? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2006, 17:48:57 |
|
||
|
Что быстрее + или StringBuffer?
|
|||
|---|---|---|---|
|
#18+
Да. Если сделать Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2006, 17:54:02 |
|
||
|
Что быстрее + или StringBuffer?
|
|||
|---|---|---|---|
|
#18+
Leonidv Соответственно, если так сделать 100000 раз, не хватить памяти и JVM умрет (в какой-то момент понадобится 100000-1 и 100000 памяти одновременно). Особенно учитывая, что GC не будет немедленно чистить старые 100000-2 и 100000-3 блоки памяти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2006, 17:56:55 |
|
||
|
Что быстрее + или StringBuffer?
|
|||
|---|---|---|---|
|
#18+
Насчет GC это уже другой вопрос. Про него точно ничего в общем сказать нельзя. Вполне возможно, что и будет чистить. А может и не будет. Полная неизвестность :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2006, 18:07:43 |
|
||
|
Что быстрее + или StringBuffer?
|
|||
|---|---|---|---|
|
#18+
LeonidvДа. Если сделать Код: plaintext 1. Дык сказали уже, что от версии зависит. 1.4: Код: plaintext Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2006, 18:21:15 |
|
||
|
Что быстрее + или StringBuffer?
|
|||
|---|---|---|---|
|
#18+
А как вы такую картинку получили? В смысле, с помощью какого инструмента. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2006, 18:35:23 |
|
||
|
|

start [/forum/topic.php?fid=59&fpage=693&tid=2147920]: |
0ms |
get settings: |
5ms |
get forum list: |
17ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
57ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
| others: | 209ms |
| total: | 359ms |

| 0 / 0 |
