Como posso melhorar o desempenho do Field.set (talvez usando MethodHandles)?
Estou escrevendo um código que chamaField.set
eField.get
muitos milhares de vezes. Obviamente, isso é muito lento por causa da reflexão.
Quero ver se posso melhorar o desempenho usandoMethodHandles
em Java7. Até agora, aqui está o que eu tenho:
Ao invés defield.set(pojo, value)
, Estou fazendo:
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);
No entanto, isso não parece ter um desempenho melhor do que a chamada Field.set usando reflexão. Estou fazendo algo errado aqui?
Eu li isso usandoinvokeExact
poderia ser mais rápido, mas quando eu tentei usar isso eu tenho umjava.lang.invoke.WrongMethodTypeException
Alguém conseguiu otimizar chamadas repetidas para Field.set ou Field.get?