代码:
public static void test() {
int i = 0;
}
public static void main(String[] args)
throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
int times = Integer.MAX_VALUE;
Method method = ReflectTest.class.getMethod("test", null);
long start = System.currentTimeMillis();
while (times-->0) {
method.invoke(ReflectTest.class);
}
long end1 = System.currentTimeMillis();
while (++times<Integer.MAX_VALUE) {
test();
}
long end2 = System.currentTimeMillis();
System.out.println("end1 - start: " + (end1-start)+", end2 - end1: "+(end2-end1));
}
结果:end1 - start: 9137, end2 - end1: 1 查了千倍,Method 方法已经算是缓存,而且不在计时之内。计时只是 invoke 方法,差异这么大,有办法改善吗?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.