Я пишу некоторый код, который вызывает Field.set
и Field.get
много-много тысяч раз. Очевидно, это очень медленно из-за отражения.
Я хочу посмотреть, смогу ли я улучшить производительность, используя MethodHandle
в Java 7. Итак, вот что у меня есть:
Вместо field.set(pojo, value)
я делаю:
private static final Map<Field, MethodHandle> setHandles = new HashMap<>();
MethodHandle mh = setHandles.get(field);
if (mh == null) {
mh = lookup.unreflectSetter(field);
setHandles.put(field, mh);
}
mh.invoke(pojo, value);
Тем не менее, это не выглядит лучше, чем вызов Field.set с использованием отражения. Я что-то здесь не так делаю?
Я читал, что использование invokeExact
может быть быстрее, но когда я попытался использовать это, я получил java.lang.invoke.WrongMethodTypeException
.
Кто-нибудь успешно смог оптимизировать повторные звонки в Field.set или Field.get?