Java > DateクラスとCalendarクラスの性能

更新日 2012-05-04
広告
DateクラスとCalendarクラスは、どちらも、現在時刻を取得する目的で利用できます。エポック時刻からの時間差を取得するだけであれば、System.currentTimeMillis()を利用することも可能です。この3つの方法にかかる時間を比較します。

環境

  • OS: Ubuntu 11.04
  • CPU: Intel Core 2 Duo
  • Java VM: 1.6.0_22 (OpenJDK Runtime Environment IcedTea6 1.10.6)
この環境で、DateクラスやCalendarクラスを100万回生成するのに要する時間を計測します。

結果

評価結果は以下のようになりました。
評価対象 かかった時間(ミリ秒)
Calendar 1007.0
Date 616.2
System.currentTimeMillis 616.3
感想をまとめます。
  • Calendarクラスの生成は、それほど遅くない。
  • Dateクラスの生成と、System.currentTimeMillisの実行は、ほぼ同じ(意外!)。

評価プログラム

評価には、以下のプログラムを利用しました。
import java.util.Calendar;
import java.util.Date;

public class DateVsCalendar {
    private static final int LOOP = 1000000;

    public static void main(String[] args) {
	    long s = 0;
	    long f = 0;

	    loopDate();
	    s = System.nanoTime();
    	loopDate();
    	f = System.nanoTime();
    	System.out.println("loop date      " + (f - s) + " nano sec");

    	loopCalendar();
    	s = System.nanoTime();
    	loopCalendar();
    	f = System.nanoTime();
    	System.out.println("loop calendar  " + (f - s) + " nano sec");

    	loopCurrentTimeMillis();
    	s = System.nanoTime();
    	loopCurrentTimeMillis();
    	f = System.nanoTime();
    	System.out.println("loop current   " + (f - s) + " nano sec");
    }

    private static void loopDate() {
    	for (int i = 0; i < LOOP; i++) {
    	    Date date = new Date();
    	}
    }

    private static void loopCalendar() {
    	for (int i = 0; i < LOOP; i++) {
    	    Calendar cal = Calendar.getInstance();
    	}
    }

    private static void loopCurrentTimeMillis() {
    	for (int i = 0; i < LOOP; i++) {
    	    long current = System.currentTimeMillis();
    	}
    }
}
広告
お問い合わせは sweng.tips@gmail.com まで。
inserted by FC2 system