当前位置: 首页 > 面试题库 >

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

濮宇定
2023-03-14
问题内容

据我了解,使用Java反射API会按顺序减慢代码执行速度。但是后来我看到它在Java Universe中的许多地方都在使用。仅举几例:

  • 注解
  • 春季框架(AOP)
  • 冬眠
  • MyBatis

这意味着我错过了关于Java反射(又称优化技术)的一些事实。有指针吗?


问题答案:

要点: 因为他们别无选择

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

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

关于反射的表现

我注意到一直都有一个区别:

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

1号很慢(这是您提到的“订单”);第二个是速度得到显着提高的数字,现在仅比本机访问慢几倍。



 类似资料:
  • 我最近用Java写了一个计算密集型算法,然后把它翻译成C++。令我吃惊的是,C++的执行速度要慢得多。我现在已经编写了一个更短的Java测试程序,以及一个相应的C++程序-参见下面。我的原始代码具有大量的数组访问功能,测试代码也是如此。C++的执行时间要长5.5倍(请参阅每个程序末尾的注释)。 以下1st21条评论后的结论... null null Java代码: C++代码:

  • 问题内容: 我已经对流进行了一些测试,特别是对nio- package的DirectoryStreams进行了流测试。我只是尝试获取目录中所有文件的列表,该列表按上次修改日期和大小排序。 旧File.listFiles()的JavaDoc对File中 的 方法进行了注释: 请注意,Files类定义了newDirectoryStream方法来打开目录并遍历目录中的文件名。当使用非常大的目录时,这可能

  • 下面的代码取自一个用G++编译的示例。多线程比单线程快2倍。 我在Visual Studio2019中执行它,结果恰恰相反:单线程比多线程快2倍。 但是,如果我对我的函数做一个小的修改,如下所示: 多线程的性能更好。我想知道是什么导致了这种行为(在实现方面有哪些可能的差异解释了它)。 此外,我还使用www.onlinegdb.com上的gcc进行了编译,结果与我的计算机中的Visual Studi

  • 问题内容: 是因为我们应该加载类(例如),创建实例,然后搜索适当的方法,打包参数,然后仅调用方法?因此,大多数时间都花在了这些操作上,而不是花在对象上的显式方法调用上,对吧? 问题答案: 使用反射时,每次执行时都需要验证您执行的每个步骤。例如,当您调用一个方法时,它需要检查目标是否实际上是该方法的声明者的实例,是否具有正确数量的参数,每个参数是否具有正确的类型,等等。 绝对没有内联或其他性能技巧的

  • 问题内容: 什么是java反射,为什么有用? 问题答案: 名称反射用于描述能够检查同一系统(或本身)中其他代码的代码。 例如,假设你在Java中有一个未知类型的对象,并且你想在该对象上调用“ doSomething”方法(如果存在)。除非对象符合已知的接口,否则Java的静态类型化系统并不是真正为支持该类型而设计的,但是使用反射,你的代码可以查看该对象并确定其是否具有名为“ doSomething

  • 问题内容: 简而言之,场景:一个拥有超过1600万条记录[2GB大小]的表。当使用ORDER BY * primary_key *时,SELECT的LIMIT偏移量越高,查询速度就越慢 所以 花费不到 那只订购30条记录,并且无论如何都相同。因此,这不是ORDER BY的开销。 现在,当获取最新的30行时,大约需要180秒。如何优化该简单查询? 问题答案: 通常,较高的偏移量会使查询速度变慢,因为