【发布时间】:2014-05-19 06:40:37
【问题描述】:
今天我想知道为什么像 `Hibernate 这样的框架在编译/应用程序启动期间使用反射而不是代码生成(例如使用像 BCEL 或 ASM 这样的库)。
是不是因为历史原因(在编写Hibernate 时,没有这样的库可以允许动态生成字节码)而现在每个人都使用这种方法?
我认为生成代码的方法会比使用反射的方法更快。
【问题讨论】:
-
反射并没有那么慢,尤其是在 I/O 的上下文中 - 数据库/文件访问将比反射造成的性能下降几个数量级。
-
是的,你可能是对的。我之所以问这个问题,是因为我对使用反射的决定感到好奇。经过这么多年的 JVM,我相信与
Java的第一个版本相比,有许多优化可以加快反射速度。
标签: java reflection metaprogramming