この小さなコードを使用して、どのメソッドがより高速かをテストしています。
public void test() {
long start = System.currentTimeMillis();
MyDate date = new MyDate();
int max = 5000;
for (int i = 0; i < max; i++) {
Calendar.getInstance().getTimeInMillis(); // <--
}
System.out.println("Calendar instance delay: " + (System.currentTimeMillis() - start));
start = System.currentTimeMillis();
for (int i = 0; i < max; i++) {
date.getMillis(); // <--
}
System.out.println("My date delay: " + (System.currentTimeMillis() - start));
}
ということで、基本的にはとの性能を比較してみます(MyDateは私が作成したクラスです)。Calendar.getInstance().getTimeInMillis()
MyDate.getMillis()
上記のコードを実行すると、次のような出力が得られました。
Calendar instance delay: 413
My date delay: 2
しかし、順序を逆にしたとき (最初に MyDate と呼ばれ、Calendar の後)、次のようになりました。
My date delay: 247
Calendar instance delay: 119
を使用してみSystem.nanoTime()
ましたが、同じことが起こりました。テストする最初のコードは、より時間がかかりました。
なぜこの違いが起こるのか、誰でも知っていますか?または、外部プロファイラー アプリケーション (純粋な Java コードのみ) を使用せずにコードを正確にプロファイリングする方法はありますか?
ありがとう。