11

据我了解,使用 Java 反射 API 会减慢订单的代码执行速度。但是后来我看到它在 Java 世界的很多地方都被使用了。仅举几例:

  • 注释
  • 弹簧框架(AOP)
  • 休眠
  • MyBatis

这意味着我错过了一些关于 java 反射(又名优化技术)的事实。任何指针?

4

2 回答 2

15

要点:因为他们别无选择

Java 不是动态语言,因此这些框架提供服务的唯一方法是反射。

其次,请注意,这些框架所做的大部分反射工作只在初始化期间发生一次,因此运行时性能不会受到影响。

关于反射的表现

我注意到一个区别一直被混淆:

  1. 成员的反射性查找
  2. 反射成员访问(调用/读/写)。

1号很慢(这是你提到的“订单”);2 号是速度显着提高的版本,现在只比本地访问慢几倍。

于 2013-05-30T07:20:35.613 回答
3

作为一般规则,性能问题应该通过分析来解决。撇开反射性能的重大改进不谈,所有这些框架都强调在启动时(或稍后,在延迟初始化的情况下)进行一次性查找。在使用它们的那种企业应用程序中,这并不重要。只要invoke进行了优化,大部分的惩罚就会消失。

于 2013-05-30T07:24:17.747 回答