反射の効率

1348 ワード

次のルーチンを用いて,反射方式と通常方式(set法)での効率の違いを同様の付与値で試験した.
著者らの現在のシステム(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);
    }
}