假设我正在编写一个反序列化实用程序,并且希望性能比反射更好。
我有一个Map<Class, MethodHandle>
,其中 MethodHandle 是给定类的所需构造函数。当用户调用T deserialize(ByteBuffer, Class<T>)
时,它会从 Map 中获取相应的 MethodHandle,从缓冲区中获取构造函数参数,然后调用MethodHandle::invoke
. 这很好用。
问题是,除非 MethodHandle 是static final
,否则性能等同于反射。
有没有办法使用 LambdaMetaFactory 或 MutableCallSite 来提高性能?我看不到如何使用 LambdaMetaFactory(我们需要提前知道接口类型?),并且创建 MutableCallSite 仍然不是static final
.