最近发现反射甚是好用,但是性能差距有多大呢。
实验环境是win8.1 64位系统,jre8,i7-4770cpu,8g内存。
方法很简单,对于一个类,分别使用直接调用和函数反射的方式调用同一个函数,看运行时间,时间使用System.currentTimeMillis()。函数仅申请一个int型局部变量并赋值。
实验结果如下表:
次数 | 10000 | 10000 | 1000000 | 10000000 | 100000000 | 1000000000 | 10000000000 |
直接调用 | 1 | 3 | 5 | 8 | 33 | 310 | 3044 |
反射调用 | 4 | 6 | 11 | 28 | 195 | 1812 | 18416 |
0.初期函数调用的开销与时间中断的开销接近,所以时间并没有线性增长。
1.函数调用次数增多,记录的开销所占比例减少,时间接近线性增长。
2.invoke与直接调用的时间差距大概是六倍,但是在小规模调用的情况下性能差距并不明显。