我知道这个话题以前已经被讨论过了,例如:Java Reflection Performance,但我的问题是,似乎很多流行的库都是通过注释和反射实现的(例如Gson、Jackson、Jaxb实现、hibernate search等)。即使它们使用反射,许多(如果不是所有)库都提供了良好(或极佳)的性能。我的问题是,它们是如何做到的?是否有一些“诀窍”需要知道,还是它们只是使用直接的反射,而性能上的担忧被夸大了?
编辑: 例如,当我们编写: MyObject obj = new Gson().fromJson(someInputStream, MyObject.class); 我可以理解库可能在内部缓存Field对象,但我觉得它需要每次通过反射实例化对象,并且基于从json解析得到的值,需要调用每个字段(通过反射)的setter方法。 或者说,有没有一种方式只在启动时支付(全部)反射成本?
我确实注意到,Gson/Jackson等具有相对较大的启动成本,在那之后速度非常快。所以显然我想知道,如果我编写一个做类似事情的库,是否有一些技巧需要了解?因为看起来你无法逃避每个调用中的某些反射。
编辑: 例如,当我们编写: MyObject obj = new Gson().fromJson(someInputStream, MyObject.class); 我可以理解库可能在内部缓存Field对象,但我觉得它需要每次通过反射实例化对象,并且基于从json解析得到的值,需要调用每个字段(通过反射)的setter方法。 或者说,有没有一种方式只在启动时支付(全部)反射成本?
我确实注意到,Gson/Jackson等具有相对较大的启动成本,在那之后速度非常快。所以显然我想知道,如果我编写一个做类似事情的库,是否有一些技巧需要了解?因为看起来你无法逃避每个调用中的某些反射。