Why is reflection slow?

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?

24
задан Maria Ines Parnisari 19 January 2014 в 23:00
поделиться

2 ответа

Каждый ваш шаг должен подтверждаться каждый раз, когда вы его делаете, когда используете отражение. Например, когда вы вызываете метод, ему необходимо проверить, действительно ли цель является экземпляром объявителя метода, есть ли у вас нужное количество аргументов, каждый ли аргумент имеет правильный тип и т. Д.

Нет абсолютно никакой возможности встраивания или других трюков с производительностью.

Если вы находите типы или методы по имени, это в лучшем случае будет включать простой поиск по карте, который будет выполняться каждый раз, когда вы его выполняете, а не один раз во время JIT.

По сути, предстоит еще многое сделать. Однако отражение стало намного быстрее, чем раньше ... если вы находите его слишком медленным, вы вполне можете злоупотреблять им.

31
ответ дан 28 November 2019 в 23:42
поделиться

В качестве дополнения к приведенному выше ответу Джона Скита (мне нужно больше репутации, чтобы иметь возможность комментировать):

Отражение зависит от доступных ресурсов ЦП; если у вас есть проблема с медленным приложением, отражение ничего не решит, просто замедлит его.

Как и сама Java, рефлексия больше не медленная - это скорее старый слух;)

6
ответ дан 28 November 2019 в 23:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: