使用反射创建对象而不是调用类构造函数会导致任何显着的性能差异吗?
我们正在尝试优化我们的dataserver应用程序.它通过mysql数据库存储股票和报价.我们对提取性能不满意.
- database
- table stock : around 500 lines
- table quote : 3 000 000 to 10 000 000 lines
- one-to-many association : one stock owns n quotes
- fetching around 1000 quotes per request
- there is an index on (stockId,date) in the quote table
- no cache, because in production, querys are always different
- Hibernate 3
- mysql 5.5
- Java 6
- JDBC mysql Connector 5.1.13
- c3p0 pooling
Run Code Online (Sandbox Code Playgroud)
所以我知道之前已经完成了这个主题,例如Java Reflection Performance,但我的特殊问题是,似乎很多流行的库都是通过注释和反射来实现的(例如Gson,Jackson,Jaxb实现,hibernate搜索).许多(如果不是全部)库提供良好(或很好)的性能,即使它们使用反射.我的问题是,他们是如何做到的?是否有一些"技巧"要知道或者他们只是使用直接反射,而表演的担忧是夸大其词?
编辑:例如,当我们写:MyObject obj = new Gson().fromJson(someInputStream,MyObject.class);
我可以理解库如何在内部缓存Field对象,但在我看来,它需要每次都反射性地实例化对象,并且它需要根据json的解析值调用每个字段上的setter(反射) .或者有没有办法只在启动时支付(全部)反射成本?
我肯定注意到Gson/Jackson等具有相对较大的启动成本,之后非常快.所以很明显我想知道,如果我写一个模糊相似的图书馆,我需要了解一些技巧吗?因为看起来你无法在每次通话时远离一些反射.