浏览 2285 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-06-19
最后修改:2009-11-30
我机器(945主板、Celeron D 3.06、1G内存、XP系统)的测试结果: 不添加干扰方法 :797 :109 添加了干扰方法后 :812 :120 大家可以做下测试,代码如下 package example; import java.lang.reflect.Method; public class Methoder { public static void main(String[] args) throws Exception { long start = System.currentTimeMillis(); for (int i = 0; i < 100000; ++i) { p1(); } System.out.println(":" + (System.currentTimeMillis() - start)); start = System.currentTimeMillis(); for (int i = 0; i < 100000; ++i) { p2(); } System.out.println(":" + (System.currentTimeMillis() - start)); } public static void p1() throws Exception { Test t = new Test(); Class c = t.getClass(); Method m = c.getMethod("sayHello", new Class[0]); m.invoke(t, new Object[0]); } public static void p2() throws Exception { Test t = new Test(); t.sayHello(); } } class Test { public void sayHello() { // System.out.println("Test:"); int l = 0; for (int i = 0; i < 1000; ++i) { l += i; } } // 以下方法为干扰用,但是两种调用方法都时间延长了点 public void sayHello1() { } public void sayHello2() { } public void sayHello3() { } public void sayHello4() { } public void sayHello5() { } public void sayHello6() { } public void sayHello7() { } public void sayHello8() { } public void sayHello9() { } public void sayHello10() { } public void sayHello11() { } public void sayHello12() { } public void sayHello13() { } public void sayHello14() { } public void sayHello15() { } public void sayHello16() { } public void sayHello17() { } public void sayHello18() { } public void sayHello19() { } public void sayHello20() { } public void sayHello21() { } public void sayHello22() { } public void sayHello23() { } public void sayHello24() { } public void sayHello25() { } public void sayHello26() { } public void sayHello27() { } public void sayHello28() { } public void sayHello29() { } public void sayHello30() { } } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-06-19
CPU: Dual E2180 2.00Ghz
测试的时候别的软件占用CPU 16%左右 Jdk:1.4.2 :937 :266 Jdk:1.6.0.05 :438 :140 这跟jdk的版本有很大关系的,jdk1.5以后性能提高很多。 |
|
返回顶楼 | |
发表时间:2008-06-19
这样的测试不严谨,过于简单化了,考虑以下两者情况:
1、类构造函数和运行方法中加入不同数据量的引用类型参数再进行对比 2、Method.invoke()、t.hello()各自抛出一定数量的异常 结果会不同,Sun官方结论是基于反射的执行效率约为实例调用的1/2。 |
|
返回顶楼 | |
发表时间:2008-06-19
我设想的是这样一种情况
针对 http://localhost/admin/index 我指向 AdminAction的index 方法,那么index方法就要通过反射来调用了 |
|
返回顶楼 | |
发表时间:2008-06-19
nwangwei 写道 我设想的是这样一种情况
针对 http://localhost/admin/index 我指向 AdminAction的index 方法,那么index方法就要通过反射来调用了 这种反射造成的开销完全可以忽略不计。 瓶颈绝不会在这里,只会在IO、网络吞吐、数据库存取之类的地方。 |
|
返回顶楼 | |