オブジェクトの生成を減らしてパフォーマンスをあげる 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 |
|