Java反射运行时性能

标签 java performance reflection

这是一个学术练习(免责声明)。

我正在构建一个应用程序,它将从尽可能快中获利,因为它将与其他应用程序竞争。

我知道与标准声明相比,使用反射声明一个类(下面的示例)会遭受巨大的损失。

Class mDefinition = Class.forName("MySpecialClassString");
Constructor mConstructor = mDefinition.getConstructor(new Class[]{MySpecialClass.class});
myClass = (MySpecialClass) mConstructor.newInstance(this);

但是,在声明 myClass 之后,如果我以标准方式使用它 myClass.myMethod() 我还会遇到性能问题 还是它会和我以标准方式宣布类(class)一样吗?

最佳答案

第一次实例化对象时会有性能损失。一旦类被加载,它就像正常实例化一样,不会有进一步的性能损失。

更进一步,如果你使用反射调用方法,将会有大约十五倍的性能损失(Java 中的默认值),之后反射调用将被 JVM 重写为与静态编译调用完全相同.因此,一旦该字节码已被 JVM 重新编译,即使重复反射方法调用也不会导致性能下降。

有关这方面的更多信息,请参阅这两个链接:

关于Java反射运行时性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7125868/

相关文章:

C#:找出代码中算术运算的结果类型(例如 int + double = double)

java - 使用 Tycho 项目构建 eclipse 功能时偶尔会出错

Web 应用程序中的 Java 并发多线程算法 - 比预期慢

java - 包含卡片布局的网格布局 - 可以做到吗?

javascript - 我如何陷入尝试的 JavaScript 包含?

c++ - 性能权衡 - MATLAB 何时比 C/C++ 更好/更慢

c++ - 将 R 代码转换为 C++ 以进行 Rcpp 实现

c# - 使用反射获取嵌套对象属性值

java - 读取注解的属性

java - 用零初始化 ArrayList<Integer> 的值 - Java