Как instanceof реализован внутри JAVA?
Короткий ответ заключается в том, что это зависит от платформы.
Длинный ответ заключается в том, что вы должны быть в состоянии узнать, как это реализовано, написав тестовый пример, который использует instanceof
, запустив его в цикле, чтобы убедиться, что он компилируется JIT, а затем выгрузив и изучив собственный код.
Однако я не думаю, что это будет особенно поучительно. Что вы действительно хотите знать, так это то, что instanceof
или Class.isAssignableFrom
быстрее. Вы можете измерить это с помощью тщательного микро-бенчмаркинга.
FWIW, я предсказываю, что вы обнаружите, что instanceof
быстрее. (Я ожидаю, что JIT-компилятор сможет оптимизировать instanceof
так, как он не сможет оптимизировать отражающую версию.)
Но, наконец, я бы посоветовал вам не тратить время на этот уровень оптимизации на данном этапе. Закодируйте это, используя instanceof
, и подождите, пока у вас не появятся данные профилирования, которые скажут вам, что ваше использование instanceof
действительно является узким местом в производительности. (Все это очень хорошо "заботиться о производительности"... но на самом деле есть более важные вещи, которые вам нужно сделать правильно, прежде чем производительность станет ключевой проблемой.)
person
Stephen C
schedule
07.01.2013