Java Reflection:为什么这么慢?
2022-08-31 17:45:32
我一直避免使用Java反射soley,因为它以缓慢而闻名。在我当前项目的设计中,我达到了一个点,能够使用它将使我的代码更具可读性和优雅性,所以我决定试一试。
我对这种差异感到惊讶,我注意到有时运行时间几乎延长了100倍。即使在这个简单的示例中,它只是实例化一个空类,它也令人难以置信。
class B {
}
public class Test {
public static long timeDiff(long old) {
return System.currentTimeMillis() - old;
}
public static void main(String args[]) throws Exception {
long numTrials = (long) Math.pow(10, 7);
long millis;
millis = System.currentTimeMillis();
for (int i=0; i<numTrials; i++) {
new B();
}
System.out.println("Normal instaniation took: "
+ timeDiff(millis) + "ms");
millis = System.currentTimeMillis();
Class<B> c = B.class;
for (int i=0; i<numTrials; i++) {
c.newInstance();
}
System.out.println("Reflecting instantiation took:"
+ timeDiff(millis) + "ms");
}
}
所以真的,我的问题是
为什么这么慢?我做错了什么吗?(甚至上面的例子也证明了这种差异)。我很难相信它真的比正常实例化慢100倍。
有没有其他东西可以更好地用于将代码视为数据(请记住,我现在坚持使用Java)