根据我的理解,使用Java反射API会按顺序减慢代码的执行速度。但后来我看到它被用在Java世界的很多地方。举几个例子:
- 注释
- Spring框架(AOP) Hibernate
- MyBatis
这意味着有一些关于java反射(又名优化技术)的事实,我错过了。有什么建议吗?
要点:因为他们别无选择
Java不是动态语言,所以这些框架提供服务的唯一方式就是通过反射。
第二,请注意,这些框架所做的大多数反射工作只在初始化期间发生一次,因此运行时性能不会受到影响。
关于反射性能
我注意到有一个区别总是被混淆:
- 反射查找成员;
- 反射成员访问(调用/读/写)。
1号慢(这是"订单")你提到);第二种方式的速度得到了显著提高,现在只比本地访问慢几倍。
作为一般规则,性能问题应该通过分析来解决。撇开反射性能的主要改进不谈,所有这些框架都强调在启动时(或者在延迟初始化的情况下)进行一次性查找。在使用它们的企业应用程序中,这并不重要。只要对invoke
进行优化,大部分的惩罚就会消失。