反射の効率
次のルーチンを用いて,反射方式と通常方式(set法)での効率の違いを同様の付与値で試験した.
著者らの現在のシステム(Linux:ubuntu 7.10 java-sun-6):
反射代入:set方式=170:1または171:2
効率の差はやはり明らかだ.
著者らの現在のシステム(Linux:ubuntu 7.10 java-sun-6):
反射代入:set方式=170:1または171:2
効率の差はやはり明らかだ.
import java.lang.reflect.*;
class Person {
private int age;
public void setAge(int age) { this.age = age; }
}
class Test {
private static final int TIMES = 1000000;
public static void main(String[] args) throws Exception {
for(int i=0; i<100; i++) {
test1();
test2();
System.out.println("================");
}
}
public static void test1() {
long rightNow = System.currentTimeMillis();
Person person = new Person();
for(int i=0; i<TIMES; i++) {
person.setAge(i);
}
rightNow = System.currentTimeMillis() - rightNow;
System.out.println(rightNow);
}
public static void test2() throws Exception {
long rightNow = System.currentTimeMillis();
Person person = new Person();
Class clazz = Person.class;
Field f = clazz.getDeclaredField("age");
for(int i=0; i<TIMES; i++) {
f.setAccessible(true);
f.set(person,i);
}
rightNow = System.currentTimeMillis() - rightNow;
System.out.println(rightNow);
}
}