Допустим, я пишу утилиту десериализации и хотел бы иметь производительность лучше, чем Reflection.
У меня есть Map<Class, MethodHandle>
, где MethodHandle - это требуемый конструктор для данного класса. Когда пользователь вызывает T deserialize(ByteBuffer, Class<T>)
, он получает соответствующий MethodHandle из карты, получает аргументы конструктора из буфера и затем вызывает MethodHandle::invoke
. И это прекрасно работает.
Дело в том, что если MethodHandle не равен static final
, то производительность эквивалентна отражению.
Есть ли способ использовать LambdaMetaFactory или MutableCallSite для повышения производительности? Я не понимаю, как можно использовать LambdaMetaFactory (нам нужно заранее знать тип интерфейса?), И создание MutableCallSite все равно не будет static final
.