Является ли полиморфизм иногда более медленным, чем if / elses? - PullRequest
2 голосов
/ 13 ноября 2010

Особенно в Яве. Полиморфно реорганизованный код работает медленнее. Возможно ли, что виновником может быть полиморфизм, или, возможно, существует беспорядочная утечка производительности, не связанная с полиморфизмом.

Ответы [ 4 ]

8 голосов
/ 13 ноября 2010

Напишите некоторый тестовый код для каждого из них и оцените их производительность.

Все остальное - догадки.

5 голосов
/ 13 ноября 2010

Да, полиморфизм может быть медленнее, чем если бы / иначе.Это будет зависеть от внутренней части вашей платформы (Java).

Но скорость не является причиной использования полиморфизма.Полиморфизм используется для того, чтобы сделать ваше решение более легким для чтения и понимания - более легким в обслуживании.

Если важна скорость, приемлемо пожертвовать этой ремонтопригодностью и не использовать полиморфизм.

РЕДАКТИРОВАТЬ:

Как указано в ряде комментариев и других ответов - не принимайте решение вслепую.Сначала измерьте влияние на производительность.

5 голосов
/ 13 ноября 2010

Теоретически это может быть потому, что JVM должна загрузить класс и создать его экземпляр перед запуском кода.Структура if / else не требует загрузки дополнительных классов.Но я никогда не видел реальных случаев использования, когда улучшение производительности должно происходить за счет потери качества проектирования.

1 голос
/ 13 ноября 2010

Полиморфизм медленнее, и есть несколько причин (например, поиск динамического метода). Как уже упоминалось в ответах выше, это не причина использовать if / else вместо полиморфизма. Спецификатор final иногда помогает ускорить код путем его оптимизации.

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