Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> оптимизация в java 
:(
    Опции темы
Sleepy_PIP
Дата 28.9.2010, 20:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 512
Регистрация: 30.6.2004
Где: Moscow

Репутация: 4
Всего: 12



подскажите пожалуста - в приведенном куске кода 
Код

            if( tag.getName() != null)
            {
                int strLen = tag.getName().length();
....
                os.write(tag.getName().getBytes());  
....
            }



сколько будет вызовов метода getName()? при условии что он возвращает только return(tagName) где tagName - String переменная экземпляра tag  (тоесть в методе нет никаких модификаций и/или вызовов других методов). как сработает оптимизатор у javac? или уже у JVM?
или все-ж для скорострельности (даже не смотря на лишний объект) лучше написать явно типа такого:
Код

            String s=tag.getName();
            if( s != null)
            {
                int strLen = s.length();
....
                os.write(s.getBytes()); 
...
            }



а если в методе есть скажем вызовы других методов, которые в свою очередь опять не содержат никаких изменений никаких данных? тогда как? 

Спасибо!


--------------------
--
Sleepy_PIP. Pavel Pryazhentsev (ex. 2:5020/141) "... Лучше быть нужным, чем
свободным ..."
PM MAIL ICQ   Вверх
LSD
Дата 29.9.2010, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Компилятор не будет инлайнить этот метод. В принципе JIT может заинлайнить его если он объявлен в этом же классе как private или final, но тоже не факт.


Цитата(Sleepy_PIP @  28.9.2010,  21:00 Найти цитируемый пост)
ли все-ж для скорострельности (даже не смотря на лишний объект) лучше написать явно типа такого:

Тут будет не лишний объект, а лишняя ссылка, да еще и созданная в стеке. Так что "стоимость" такой ссылки намного ниже "стоимости" вызова метода.


--------------------
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.
PM MAIL WWW   Вверх
Sleepy_PIP
Дата 29.9.2010, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 512
Регистрация: 30.6.2004
Где: Moscow

Репутация: 4
Всего: 12



Цитата(LSD @ 29.9.2010,  18:24)
Компилятор не будет инлайнить этот метод. В принципе JIT может заинлайнить его если он объявлен в этом же классе как private или final, но тоже не факт.


Цитата(Sleepy_PIP @  28.9.2010,  21:00 Найти цитируемый пост)
ли все-ж для скорострельности (даже не смотря на лишний объект) лучше написать явно типа такого:

Тут будет не лишний объект, а лишняя ссылка, да еще и созданная в стеке. Так что "стоимость" такой ссылки намного ниже "стоимости" вызова метода.

инлайнить метод может быть и не будет ... а вот сколько реально вызовов будет? .... по логике - надо всего 1 вызов, а результат - в темп переменную (ссылку в данном случае) и потом ее и использовать не вызывая повторно метод (а метод может быть ведь и "тяжелый" хотя и ничего не модифицирующий кроме результата, причем как видим результат всегда один если не модифицируются поля экземпляра класса). а?

ведь приведенный пример - только пример. 

в таком случае все-ж лучше временная переменная. да, нет?

хотя ... можно ведь по ссылке экземпляра класса (или через статики, рефлекцию и т.д. ) добраться и из другого потока до полей экземпляра на основе которых строится результат (даже если это всего 1 поле). наверное вряд-ли оптимизатор настолько умен что-б остледить подобное. да. кажется вопрос закрыт. будет вызовов метода столько сколько их написано программером ...


--------------------
--
Sleepy_PIP. Pavel Pryazhentsev (ex. 2:5020/141) "... Лучше быть нужным, чем
свободным ..."
PM MAIL ICQ   Вверх
LSD
Дата 29.9.2010, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(Sleepy_PIP @  29.9.2010,  19:51 Найти цитируемый пост)
по логике - надо всего 1 вызов, а результат - в темп переменную (ссылку в данном случае) и потом ее и использовать не вызывая повторно метод (а метод может быть ведь и "тяжелый" хотя и ничего не модифицирующий кроме результата, причем как видим результат всегда один если не модифицируются поля экземпляра класса). а?

А если между первым и вторым вызовом метода, другой поток модифицирует переменную tagName? А если метод сложный и тяжелый, то JIT тем более не сможет определить есть ли побочные эффекты у этого метода.


--------------------
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.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0599 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.