instanceof против полиморфизма - почему instanceof быстрее? - PullRequest
0 голосов
/ 29 августа 2018

Хорошо, я проводил некоторое тестирование, и instanceof казался быстрее полиморфизма. Так что я нашел очень интересный ответ , который одобряет мое тестирование. instanceof работает быстрее.

Изменение одного метода моего приложения на instanceof if-else (7 классов) вместо полиморфизма уменьшило его загрузку почти на 3%. (Более 50 000 обращений в секунду к этому методу согласно моему пользовательскому профилировщику) - Также имейте в виду, что данный метод возвращает только int, ноль вычислений, абсолютно ничего особенного.

Вопрос: К сожалению, я не смог найти никакой реальной информации о том, почему. Итак, если говорить технически очень глубоко, как может гигант, если он еще может быть быстрее, чем простой полиморфизм / Посетитель?

Исходный код эталонного теста: https://github.com/michaeldorner/instanceofBenchmark

1 Ответ

0 голосов
/ 29 августа 2018

JVM поддерживает только до 2 возможных реализаций с сайта вызова. Это означает, что если у вас больше 2, код не будет оптимизирован для некоторых случаев.

Если вместо этого вы делаете только если if / else, вероятно, будет только одна реализация для вызова, и, таким образом, все это может быть встроено.

Встраивание - ключевая особенность многих методов оптимизации.

Короче говоря, если у вас мегаморфный вызов, вы можете увидеть небольшие, но существенные улучшения за счет рефакторинга, если код достаточно горячий. http://insightfullogic.com/2014/May/12/fast-and-megamorphic-what-influences-method-invoca/

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