Показать сообщение отдельно

  #170  
Старый 07.02.2016, 21:35
WoWan-SM
Участник форума
Регистрация: 15.09.2015
Сообщений: 119
С нами: 5610336

Репутация: 766
По умолчанию

Цитата:
Сообщение от 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  

Всегда важно эффективность решения, а не подход.

Подход - это набор инструментов/скилов по сути, а эффективность работы - это результат - людям нужен результат.

Пока вы не поймете таких простых вещей, вы будете задавать неправильные вопросы и иметь неправильные ответы.

Сразу вспоминаю про это книгу... надеюсь с юмором отнесетесь к этому
 
Ответить с цитированием