Сколько раз вы слышали тезис о том, что в Java Reflection тормозит, и лучше его избегать. Насколько это правда?
С одной стороны, JMH benchmark на коленке, написанный на Java 17 говорит - деградация по сравнению с прямым вызовом есть, примерно 20-25%. Так в чём же дело?
На практике, на performance reflection-а влияет множество вещей:
- Проверки на доступ (Известный
setAccessible)- Возможности инлайнинга методов JIT-ом
- Необходимый Boxing/Unboxing в силу сигнатуры
Method#invoke() и т.д.В статье от Бена Эванса, писателя и jvm-инженера, рассказывается о том, почему производительность reflection-а имела проблемы. Однако в Java 18 reflection начал использовать
MethodHandles и это многое поменяло.P.S: Если будет интересно, пишите, обязательно расскажем и про MethodHandles.
📎 Полный текст: https://habr.com/ru/companies/spring_aio/articles/1056734/
