Java Tips


オブジェクトの生成を減らしてパフォーマンスをあげる


Javaの基本的な知識ですが、Javaでの一番のコストはたいていの場合オブジェクトの作成です。

以下のコードでは、fastのほうがslowの約2倍の速度で動作します。
どちらもIntegerのインスタンスを作成していますが、fastのほうはStringオブジェクトを再利用しています。
これに対してslowは毎回Stringオブジェクトを作成しているので、そのコスト分時間がかかっています。



public class NewTest
{
	static void main (String[] args)
	{
		NewTest test = new NewTest();
		Stopwatch sw = new Stopwatch();

		sw.start();
		test.slow();
		sw.stop();
		System.out.println("slow: " + sw.getTime() + "ms");

		sw.start();
		test.fast();
		sw.stop();
		System.out.println("fast: " + sw.getTime() + "ms");
	}

	public void slow()
	{
		// slow
		for(int i=1; i < 1000000; i++)
		{
			String s = new String(Integer.toString(i));
		}
	}

	public void fast()
	{
		// faster
		String s = "";
		for(int i=1; i < 1000000; i++)
		{
			s = Integer.toString(i);
		}
	}

}

/**
 *  Stopwatch.java
 */

class Stopwatch
{

	private long start = 0; // Time of starting
	private long stop = 0; // Time of stopping

	public void start()
	{
		start = System.currentTimeMillis();
	}

	public void stop()
	{
		stop = System.currentTimeMillis();
	}

	public long getTime()
	{
		if(start == 0 || stop == 0)
		{
			System.err.println("You didn't start or stop Stopwatch.");
		}

		return stop - start;
	}
}



目次に戻る
Copyright(c) 2008 WoodenSoldier Software