Если отражение в Java замедляет выполнение заказами, почему это так много фреймворков?
Как я понимаю, использование API отражения Java замедляет выполнение кода по заказам. Но потом я вижу, что он используется во многих местах в Java-юниверсе. Чтобы назвать несколько:
- Аннотации
- Spring framework (AOP)
- Hibernate
- MyBatis
Это означает, что есть какой-то факт об отражении Java (так называемый метод оптимизации), который я пропустил. Любые указатели?
Ответы
Ответ 1
Основная точка: потому что у них нет другого выбора.
Java не является динамическим языком, поэтому единственный способ, которым эти фреймворки могут предоставлять свои услуги, - это отражение.
Во-вторых, обратите внимание, что большая часть работы по отражению этих фреймворков происходит только один раз, во время инициализации, поэтому производительность выполнения не влияет.
О характеристике отражения
Есть одно различие, которое я замечаю, что все время смешалось:
- отражающий поиск членов;
- отражающий доступ к члену (вызов/чтение/запись).
Номер 1 медленный (это упоминание "приказы" ); номер 2 - тот, который получил значительные улучшения скорости и теперь только в несколько раз медленнее, чем собственный доступ.
Ответ 2
Как правило, проблемы производительности должны решаться путем профилирования. Оставляя в стороне основные улучшения в производительности отражения, все эти рамки подчеркивают одноразовый поиск при запуске (или позже, в случае ленивой инициализации). В своем корпоративном приложении, которое их использует, это не актуально. Пока invoke
оптимизирован, большая часть штрафа уйдет.