我有bean util库,我们当然会缓存Method
/ Fields
属性。阅读和写作都是通过反思来实现的。
有一个想法是跳过反射,并为每个方法/字段字节码生成一个直接调用目标的简单对象。例如,如果我们有setFoo(String s)
方法,我们会调用此生成的类的set(String s)
方法,该方法在内部调用setFoo()
。同样,我们正在用运行时生成的直接调用替换反射调用。
我知道Java与GeneratedMethodAccessor
的做法类似。但它的缓存可能受到JVM参数的限制。
考虑到性能,是否有人知道我的实施是否有意义?一方面,它听起来不错,但另一方面,将会创建许多新类 - 并填充perm gen space。
有关此主题的任何经验吗?
答案 0 :(得分:1)
您正在尝试重新发明cglib的FastMethod
事实上,反射并不慢。看到
https://stackoverflow.com/a/23580143/3448419
每秒可以进行超过50,000,000次调用。它不太可能成为瓶颈。