Производительность в Java между использованием obj.getXY () и Object o = obj.getXY () - PullRequest
1 голос
/ 02 апреля 2011

Название может вводить в заблуждение, но я не могу собрать свой вопрос в одно предложение.

Поскольку я занимаюсь разработкой для Android, я гораздо больше беспокоюсь о производительности. И из-за этого я подумал об использовании

obj.getXY().doX(); 
obj.getXY().doY();

или

Object o = obj.getXY();
o.doX(); 
o.doY();

Что быстрее? Создание ссылки для вызова всех методов или использование всегда метода получения?

Ответы [ 2 ]

3 голосов
/ 02 апреля 2011

Первый вариант никогда не будет быстрее второго, он равен

{Object tmp = obj.getXY(); tmp.doX();}
{Object tmp = obj.getXY(); tmp.doY();}

Если getXY() тривиален (например, просто возвращает константу), а финальный, хороший компилятор оптимизирует двойной вызовдалеко.Во всех других случаях дополнительный вызов метода сделает его медленнее.

Поскольку вторая версия в любом случае более читаема, я бы пошел с ней.Но, как отмечают другие, если getXY() не сложен, этот тип микрооптимизации не окажет заметного влияния на производительность вашей программы.

Просто проверено it (doX() / doY() не используются, OpenJDK6 на x64):

Integer getXY(){return 42;}: нет заметных различийInteger getXY(){return Integer.valueOf("42");}: Вариант два примерно в два раза быстрее, чем следует ожидать.

1 голос
/ 02 апреля 2011

На самом деле второе может быть немного быстрее в версиях Android до 2.3. Здесь даже выгодно вообще не иметь геттеров и напрямую делать

obj.xy.doX();

или

Object o = obj.xy;
o.doX();
o.doY();

См. документы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...