クラスの静的なメソッドへのアクセス、静的なインスタンスへのアクセス、普通のNewにどれくらいの速度差があるのか気になったのでテストしてみる。

条件:

  • JavaSE 1.6
  • 10000000回実行を10セット行い、各セットの処理時間の平均を取る(ms)
  • チェック項目
    1. クラスの静的なメソッドへのアクセス時間
    2. 静的なインスタンスのメソッドへのアクセス時間
    3. 動的なインスタンスのメソッドへのアクセス時間

結果:

StaticInstance vs Static vs New

ごく自然なグラフになり、やっぱり何度も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);
	}
}

関連性がある記事

Disqusでコメント