| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > оптимизация в java |
| Автор: Sleepy_PIP 28.9.2010, 20:00 | ||||
подскажите пожалуста - в приведенном куске кода
сколько будет вызовов метода getName()? при условии что он возвращает только return(tagName) где tagName - String переменная экземпляра tag (тоесть в методе нет никаких модификаций и/или вызовов других методов). как сработает оптимизатор у javac? или уже у JVM? или все-ж для скорострельности (даже не смотря на лишний объект) лучше написать явно типа такого:
а если в методе есть скажем вызовы других методов, которые в свою очередь опять не содержат никаких изменений никаких данных? тогда как? Спасибо! |
| Автор: Sleepy_PIP 29.9.2010, 18:51 | ||||
инлайнить метод может быть и не будет ... а вот сколько реально вызовов будет? .... по логике - надо всего 1 вызов, а результат - в темп переменную (ссылку в данном случае) и потом ее и использовать не вызывая повторно метод (а метод может быть ведь и "тяжелый" хотя и ничего не модифицирующий кроме результата, причем как видим результат всегда один если не модифицируются поля экземпляра класса). а? ведь приведенный пример - только пример. в таком случае все-ж лучше временная переменная. да, нет? хотя ... можно ведь по ссылке экземпляра класса (или через статики, рефлекцию и т.д. ) добраться и из другого потока до полей экземпляра на основе которых строится результат (даже если это всего 1 поле). наверное вряд-ли оптимизатор настолько умен что-б остледить подобное. да. кажется вопрос закрыт. будет вызовов метода столько сколько их написано программером ... |
| Автор: LSD 29.9.2010, 19:40 | ||
А если между первым и вторым вызовом метода, другой поток модифицирует переменную tagName? А если метод сложный и тяжелый, то JIT тем более не сможет определить есть ли побочные эффекты у этого метода. |