0

我知道反射有点慢,因为所有检查/验证都是在运行时执行的。

假设我正在使用反射和调用方法来实例化一个类。所以我的问题是调用会总是很慢(即使它比正常情况慢 1%)还是第一次?假设这个类是我的 Web 应用程序的一部分,它被多次调用。

我困惑的另一个角度是,现在大多数现代 JVM 都使用 JIT 编译器。所以 JVM 不会尝试优化后续调用。

4

2 回答 2

1

是的,即使在连续调用时也慢得多。它很慢,因为必须有调用设置和拆卸行为,否则编译器会在字节码中硬编码。

于 2012-12-04T18:05:00.117 回答
1

是的,调用总是很慢。JIT 编译器优化 Java 字节码并将其编译为本机代码;它不会记忆或以其他方式缓存方法的结果,调用反射 API 意味着调用方法。编译后的本机代码仍然会在每次调用时调用运行时的反射工具,就是慢的原因。

使用反射调用方法总是比直接调用要慢得多。但是,请注意,方法的主体将以正常速度执行——只有调用方法的过程会很慢。

与往常一样,分析您的代码。如果通过反射进行的实例化和方法调用成为瓶颈,则进行相应的优化。(例如,如果调用的方法正在查询数据库,那么该操作很可能是您的瓶颈,反射引入的开销不太可能成为问题。)

于 2012-12-04T18:06:07.280 回答