Сообщение от
gattsu
как показывает опыт, java и оптимизация вещи не совместимые. Легче плюнуть и пойти бухать
Ничего подобного. Весь бекенд ok.ru написан на яве. Ну если пилой гвозди забивать, то ясен красен что ничего хорошего таким образом не построишь.
Сообщение от
Visor123
Неправильный ответ ни для 0 ни для 1 итерации цикла, измерять нужно то что есть в задаче 1 поста, а не в выдуманном примере, который хочется измерять - там вообще-то все очевидно было еще до него.
getCommand() задается 1 раз при создании объекта.
Насчет добавить StringBuilder Для 0 итераций очень сильно ускорит и сделает конфетку?
Да и вообще у вас ответы противоречат - нельзя выбрать или быстрее или экономнее.
Самый экономный вариант памяти, который при создании объекта занимает минимальное кол-во памяти, другой вариант - это если переписать без конкатенций строк - этот вариант будет самый быстрый, быстрее чем любые StringBuilder. Это очевидно, странно что реальную оптимизацию не никто смог сделать - вы же писали столько слов .... и даже не смогли найти что оптимизировать ....
Почему никто не смог ничего придумать, кроме глупого цикла на 100000 итераций вместо 0-1 реальной итерации - померяйте что будет быстрее при 0-1 итерации предложенного примера - вы узнаете реальный ответ.
Увы не имею возможности сделать такую проверку. Если бы была обязательно сделал бы.
Так вы уж определитесь в процессе выполнения метода где вызывается getCommand() он может измениться или все таки нет?
Ни на сколько не ускорит, согласен. Но все таки лучше и правильнее было сделать с использованием StringBuilder, мало ли вы решите расширить функционал и будет н 0-1 итерации , а больше.
Мои ответы как раз таки не противоречат, конкретно в данном случае можно сделать, чтобы и быстрее и экономнее работало.
Просто еще раз посмотрите на это:
Сообщение от
gattsu
0 ldc 16; /* "a" */
2 astore_1; /* a */
/* L7 */
3 ldc 18; /* "b" */
5 astore_2; /* b */
/* L8 */
6 getstatic 20; /* java.lang.System.out */
9 new 26;
12 dup;
13 aload_1; /* a */
14 invokestatic 28; /* java.lang.String java.lang.String.valueOf(java.lang.Object b) */
17 invokespecial 34; /* java.lang.StringBuilder(java.lang.String a) */
20 aload_2; /* b */
21 invokevirtual 37; /* java.lang.StringBuilder append(java.lang.String b) */
24 invokevirtual 41; /* java.lang.String toString() */
27 invokevirtual 45; /* void println(java.lang.String b) */
Что мы тут видим? При каждом сложении происходит создании объекта StringBuilder и в нем уже происходит уже аппенд строк.
Конкретно у вас в цикле происходит 15 операций конкатенаций. Создается 15 объектов StringBuilder.
Да эти 15 объектов успешно удалит GC, но блин зачем лишний раз нагружать и его еще?
Сообщение от
Visor123
Всегда важно эффективность решения, а не подход.
Подход - это набор инструментов/скилов по сути, а эффективность работы - это результат - людям нужен результат.
Пока вы не поймете таких простых вещей, вы будете задавать неправильные вопросы и иметь неправильные ответы.
Сразу вспоминаю про это книгу... надеюсь с юмором отнесетесь к этому