如果Java中的reflection减慢了命令的执行速度,为什么这么多框架会使用它呢?

根据我的理解,使用JavareflectionAPI会减慢订单执行代码的速度。 但后来我发现它被用在Java宇宙中的很多地方。 仅举几例:

  • 注释
  • Spring框架(AOP)
  • 过冬
  • MyBatis的

这意味着我错过了一些关于javareflection(也就是优化技术)的事实。 有什么指针吗?

要点: 因为他们别无选择

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

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

关于反思的表现

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

  1. 反思性查询成员;
  2. reflection成员访问 (调用/读/写)。

1号很慢(这是你提到的“命令”); 数字2是速度提升显着的速度,现在只比本机访问慢几倍。

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