这是一个学术练习(免责声明)。
我正在构建一个应用程序,它将从尽可能快中获利,因为它将与其他应用程序竞争。
我知道与标准声明相比,使用反射声明一个类(下面的示例)会遭受巨大的损失。
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/