Is it because we should load class (by string
for example), create instance, then search for appropriate method, pack parameters, and then just invoke method? So most time is spent on these operations instead of explicit method invocation on an object, right?
Каждый ваш шаг должен подтверждаться каждый раз, когда вы его делаете, когда используете отражение. Например, когда вы вызываете метод, ему необходимо проверить, действительно ли цель является экземпляром объявителя метода, есть ли у вас нужное количество аргументов, каждый ли аргумент имеет правильный тип и т. Д.
Нет абсолютно никакой возможности встраивания или других трюков с производительностью.
Если вы находите типы или методы по имени, это в лучшем случае будет включать простой поиск по карте, который будет выполняться каждый раз, когда вы его выполняете, а не один раз во время JIT.
По сути, предстоит еще многое сделать. Однако отражение стало намного быстрее, чем раньше ... если вы находите его слишком медленным, вы вполне можете злоупотреблять им.
В качестве дополнения к приведенному выше ответу Джона Скита (мне нужно больше репутации, чтобы иметь возможность комментировать):
Отражение зависит от доступных ресурсов ЦП; если у вас есть проблема с медленным приложением, отражение ничего не решит, просто замедлит его.
Как и сама Java, рефлексия больше не медленная - это скорее старый слух;)