![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
Sleepy_PIP |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 512 Регистрация: 30.6.2004 Где: Moscow Репутация: 4 Всего: 12 |
подскажите пожалуста - в приведенном куске кода
сколько будет вызовов метода getName()? при условии что он возвращает только return(tagName) где tagName - String переменная экземпляра tag (тоесть в методе нет никаких модификаций и/или вызовов других методов). как сработает оптимизатор у javac? или уже у JVM? или все-ж для скорострельности (даже не смотря на лишний объект) лучше написать явно типа такого:
а если в методе есть скажем вызовы других методов, которые в свою очередь опять не содержат никаких изменений никаких данных? тогда как? Спасибо! -------------------- -- Sleepy_PIP. Pavel Pryazhentsev (ex. 2:5020/141) "... Лучше быть нужным, чем свободным ..." |
||||
|
|||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Компилятор не будет инлайнить этот метод. В принципе JIT может заинлайнить его если он объявлен в этом же классе как private или final, но тоже не факт.
Тут будет не лишний объект, а лишняя ссылка, да еще и созданная в стеке. Так что "стоимость" такой ссылки намного ниже "стоимости" вызова метода. -------------------- 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. |
|||
|
||||
Sleepy_PIP |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 512 Регистрация: 30.6.2004 Где: Moscow Репутация: 4 Всего: 12 |
инлайнить метод может быть и не будет ... а вот сколько реально вызовов будет? .... по логике - надо всего 1 вызов, а результат - в темп переменную (ссылку в данном случае) и потом ее и использовать не вызывая повторно метод (а метод может быть ведь и "тяжелый" хотя и ничего не модифицирующий кроме результата, причем как видим результат всегда один если не модифицируются поля экземпляра класса). а? ведь приведенный пример - только пример. в таком случае все-ж лучше временная переменная. да, нет? хотя ... можно ведь по ссылке экземпляра класса (или через статики, рефлекцию и т.д. ) добраться и из другого потока до полей экземпляра на основе которых строится результат (даже если это всего 1 поле). наверное вряд-ли оптимизатор настолько умен что-б остледить подобное. да. кажется вопрос закрыт. будет вызовов метода столько сколько их написано программером ... -------------------- -- Sleepy_PIP. Pavel Pryazhentsev (ex. 2:5020/141) "... Лучше быть нужным, чем свободным ..." |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
А если между первым и вторым вызовом метода, другой поток модифицирует переменную 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. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |