Yes - absolutely.通过反射查找一个类要比by magnitude更昂贵.
引用Java's documentation on reflection:
由于反射涉及动态解析的类型,因此无法执行某些Java虚拟机优化.因此,与非反射操作相比,反射操作的性能较低,应该避免在对性能敏感的应用程序中频繁调用的代码段中使用反射操作.
下面是一个简单的测试,我用5分钟在我的机器上运行Sun JRE 6u10:
public class Main {
public static void main(String[] args) throws Exception
{
doRegular();
doReflection();
}
public static void doRegular() throws Exception
{
long start = System.currentTimeMillis();
for (int i=0; i<1000000; i++)
{
A a = new A();
a.doSomeThing();
}
System.out.println(System.currentTimeMillis() - start);
}
public static void doReflection() throws Exception
{
long start = System.currentTimeMillis();
for (int i=0; i<1000000; i++)
{
A a = (A) Class.forName("misc.A").newInstance();
a.doSomeThing();
}
System.out.println(System.currentTimeMillis() - start);
}
}
根据这些结果:
35 // no reflection
465 // using reflection
请记住,查找和实例化是一起完成的,在某些情况下可以重构查找,但这只是一个基本示例.
即使只是实例化,您仍然会受到性能的影响:
30 // no reflection
47 // reflection using one lookup, only instantiating
再说一遍,YMMV.