字节码生成访问对象与GeneratedMethodAccessor

时间:2014-07-31 10:20:37

标签: java performance bytecode

我有bean util库,我们当然会缓存Method / Fields属性。阅读和写作都是通过反思来实现的。

有一个想法是跳过反射,并为每个方法/字段字节码生成一个直接调用目标的简单对象。例如,如果我们有setFoo(String s)方法,我们会调用此生成的类的set(String s)方法,该方法在内部调用setFoo()。同样,我们正在用运行时生成的直接调用替换反射调用。

我知道Java与GeneratedMethodAccessor的做法类似。但它的缓存可能受到JVM参数的限制。

考虑到性能,是否有人知道我的实施是否有意义?一方面,它听起来不错,但另一方面,将会创建许多新类 - 并填充perm gen space。

有关此主题的任何经验吗?

1 个答案:

答案 0 :(得分:1)

您正在尝试重新发明cglib的FastMethod
事实上,反射并不慢。看到 https://stackoverflow.com/a/23580143/3448419

每秒可以进行超过50,000,000次调用。它不太可能成为瓶颈。