【Java入門】System.nanoTime()で処理時間をナノ秒単位で測定する方法
経過時間(Elapsed Time)とは、ある処理やイベントが開始してから終了するまでにかかった時間のことです。Javaでは、複数の方法で経過時間を計測できますが、その中でも最も高精度なのが System.nanoTime() メソッドを使う方法です。
nanoTime() メソッドは、現在の時刻をナノ秒単位で返します。これを利用すれば、特定のメソッドの実行時間をミリ秒よりも細かい精度で測定することが可能です。基本的な手順は以下の通りです。
nanoTime()メソッドを使って、開始時刻を取得します。- 測定したいメソッドを実行します。
- 再び
nanoTime()メソッドを使って、終了時刻を取得します。 - 最後に、終了値から開始値を引いた差分を計算します。
補足:nanoTime() と currentTimeMillis() の違い
よく似たAPIとして System.currentTimeMillis() がありますが、こちらはシステムの「壁時計」に基づくため、NTP同期などにより時刻が遡ることがあります。一方、nanoTime() は経過時間の測定専用に設計されており、負の値になることはありません。処理速度の計測には必ず nanoTime() を使用するのが推奨されています。
サンプルコード
public class Example {
public void test(){
int num = 0;
for(int i=0; i<=50; i++){
num = num + i;
System.out.print(num + ", ");
}
}
public static void main(String args[]){
// 開始時刻を取得
long begin = System.nanoTime();
// 測定対象のメソッドを実行
new Example().test();
// 終了時刻を取得
long end = System.nanoTime();
// 差分から経過時間を算出
long time = end - begin;
System.out.println();
System.out.println("Elapsed Time: " + time);
}
}
実行結果
0, 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, 66, 78, 91, 105, 120, 136, 153, 171, 190, 210, 231, 253, 276, 300, 325, 351, 378, 406, 435, 465, 496, 528, 561, 595, 630, 666, 703, 741, 780, 820, 861, 903, 946, 990, 1035, 1081, 1128, 1176, 1225, 1275, Elapsed Time: 1530200
この例では、1〜50までの合計を計算する test() メソッドの実行時間が、約1,530,200ナノ秒(約1.53ミリ秒)であることがわかります。このように、開始と終了の2点で時刻を取得し差分を取るだけで、誰でも簡単に高精度なパフォーマンス計測が実現できます。
-
EclipseでOpenCV(Java)をセットアップする方法をわかりやすく解説
EclipseでOpenCVのJava開発環境を構築するには、まずお使いのシステムにEclipseとJDK(Java)が正しくインストールされていることを確認してください。この記事では、Mavenの依存関係を利用する方法と、JARファイルを手動で追加する方法の2つのアプローチを紹介します。 方法1:Mavenの依存関係を使ってセットアップする Mavenを利用してOpenCV環境を構築する場合、まずEclipseで通常のJavaプロジェクトを作成し、それをMavenプロジェクトに変換します。プロジェクトを右クリックし、「Configure(構成)」から「Convert to Maven Pro
-
JavaとOpenCVで画像を回転させる方法をわかりやすく解説
JavaでOpenCVを使って画像を回転させたい場合、ImgprocクラスのwarpAffine()メソッドを使用します。このメソッドは、指定された画像にアフィン変換(平行移動・回転・拡大縮小などの線形変換)を適用するためのものです。warpAffine()メソッドのパラメータwarpAffine()メソッドは、以下の引数を受け取ります。変換元の画像(src)、変換先の画像(dst)、変換行列(M)を表す3つのMatオブジェクト出力画像のサイズを表す整数値(Sizeオブジェクト)画像を回転させる手順画像を回転させるには、まずgetRotationMatrix2D()メソッドを使って回転行列を作