![]() |
|
Модераторы: Poseidon |
![]()
|
|
| kornata |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 89 Регистрация: 25.2.2010 Репутация: нет Всего: нет |
Помогите выполнить задание:
Проанализируйте с помощью javap, сможем ли мы сэкономить в SprinklerSystem.toString()какое-то количество созданий StringBuilder, если будем создавать их сами, или компилятор достаточно хорошо справляется с задачей? То есть, если бы мы сами создавали StringBuilder, сами вызывали append(), мы бы добились меньшего числа созданий StringBuilder? А меньшего числа вызовов StringBuilder.append()? |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 9 Всего: 538 |
А где сам SprinklerSystem?
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| kornata |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 89 Регистрация: 25.2.2010 Репутация: нет Всего: нет |
Извините, вот он:
|
|||
|
||||
| LSD |
|
||||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 9 Всего: 538 |
Я использовал JDK 1.6, на других версиях результаты могут немного различаться.
Итак компилим классы, затем запускаем javap (скомпилированные классы должны быть в classpath):
На выходе в SprinklerSystem.jad получим:
Смотрим на строки 16-18 там мы видим создание объекта StringBuilder и вызов конструктора по умолчанию. Больше создание объекта StringBuilder не наблюдается, так что можно сделать вывод, что тут компилятор достаточно оптимален. Далее мы видим 20 вызовов StringBuilder.append(), т.к. конкатенируемая строка состоит из 20 частей, то тут лишних вызовов нет. В принципе, программист мог бы вместо вызова коструктора по умолчанию вызвать конструктор который в качестве аргумента принимает строку и таким образом сэкономить один вызов append(), но учитывая что этот конструктор внутри себя все равно вызывает append() экономия будет нулевой. Плюс компилятор имеет возможность эффективно выбирать между StringBuilder и StringBuffer в зависимости от целевой JDK, в ручную это эффективно не сделать. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
||||
|
|||||
| kornata |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 89 Регистрация: 25.2.2010 Репутация: нет Всего: нет |
Большое спасибо!
|
|||
|
||||
![]()
|
| Правила форума "Центр помощи" | |
|
|
ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Более подробно с правилами данного раздела Вы можете ознакомится в этой теме. Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Центр помощи | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |