クラスの静的なメソッドへのアクセス、静的なインスタンスへのアクセス、普通のNewにどれくらいの速度差があるのか気になったのでテストしてみる。
条件:
- JavaSE 1.6
- 10000000回実行を10セット行い、各セットの処理時間の平均を取る(ms)
- チェック項目
- クラスの静的なメソッドへのアクセス時間
- 静的なインスタンスのメソッドへのアクセス時間
- 動的なインスタンスのメソッドへのアクセス時間
結果:
ごく自然なグラフになり、やっぱり何度もnewするのはコスト的辛い感じ。静的なメソッドへのアクセスと比べて約2.5倍のコストがかかる。静的なインスタンスと静的なメソッドはほぼ差が無さそう。
測定に使用したコード:
public class A
{
public static final A service = new A();
public static A getInstance()
{
return service;
}
public long inc(long v)
{
return v + 1;
}
}
public class B
{
public static long inc(long v)
{
return v + 1;
}
}
public class C
{
public long inc(long v)
{
return v + 1;
}
}
public class test {
public static void main(String[] args)
{
for(int i=0; i<10; i++)
//test1, test2, test3をそれぞれ個別に指定
}
public static void test1()
{
long start = System.currentTimeMillis();
long a = 0;
for(long i=0; i<10000000; i++)
{
a = A.getInstance().inc(i);
}
long end = System.currentTimeMillis();
System.out.println((end - start) + ":" + a);
}
public static void test2()
{
long start = System.currentTimeMillis();
long a = 0;
for(long i=0; i<10000000; i++)
{
a = B.inc(i);
}
long end = System.currentTimeMillis();
System.out.println((end - start) + ":" + a);
}
public static void test3()
{
long start = System.currentTimeMillis();
long a = 0;
for(long i=0; i<10000000; i++)
{
a = new C().inc(i);
}
long end = System.currentTimeMillis();
System.out.println((end - start) + ":" + a);
}
}