【Java入門】処理時間をナノ秒・マイクロ秒で計測する方法

Javaには処理時間を計測するための「System.currentTimeMillisメソッド」と「System.nanoTimeメソッド」があります。

処理にどのくらい時間がかかるのかをミリ秒単位、ナノ秒単位で計測することができます。

この記事では、時間を計測する方法について、以下の内容で解説していきます!


・処理時間を計測する方法
・ミリ秒単位で処理時間を計測する方法
・マイクロ秒単位で処理時間を計測する方法
・ナノ秒単位で処理時間を計測する方法
・メソッドの処理速度を比較する方法

今回はこれらの方法を覚えるために、時間計測のさまざまな使い方をわかりやすく解説します!

Javaで処理時間を計測するには?

Javaで処理時間を計測するには、処理を開始した時刻と終了した時刻を記録して、その差を求めることで計測します。

処理速度を計測することで、プログラムを実行するのにどのくらいの時間がかかるのかを調べたり、似たようなメソッドが用意されているときにどちらのメソッドを使った方が速いのかを比較することができます。

ミリ秒単位で処理時間を計測する方法(currentTimeMillis)

ミリ秒単位で処理時間を計測するには「System.currentTimeMillisメソッド」を使います。

「System.currentTimeMillisメソッド」の戻り値はlong型エポック秒から経過した時間を返します。

そのため、戻り値はlong型の変数に格納します。

ミリ秒単位で処理時間を計測する方法を次のプログラムで確認してみましょう。

実行結果

このプログラムでは、初めに処理前の時刻を取得して、時間計測をしたい処理が終わった後の時刻から引いた差を処理時間として表示してきます。

このように「System.currentTimeMillisメソッド」を使うことで処理時間を計測することができました!

ナノ秒単位で処理時間を計測する方法(nanoTime)

ナノ秒単位で処理時間を計測するには「System.nanoTimeメソッド」を使います。

「System.nanoTimeメソッド」の戻り値はlong型プログラムを実行しているマシンの時間を返します。

「System.currentTimeMillisメソッド」のエポック秒のように基準となる時間があるわけではないので、現在の時間を調べることはできません。

ナノ秒単位で処理時間を計測する方法を次のプログラムで確認してみましょう。

実行結果

このプログラムでは、初めに処理前の時刻を取得して、時間計測をしたい処理が終わった後の時刻から引いた差を処理時間として表示してきます。

このように「System.currentTimeMillisメソッド」を使うことで処理時間を計測することができました!

マイクロ秒単位で処理時間を計測する方法

マイクロ秒はナノ秒の1000倍なので、ナノ秒単位で処理時間を計測した後に1000で割ることで計測できます。

次のプログラムで確認してみましょう。

実行結果

メソッドの処理速度を比較する方法

ここでは実際にメソッドの処理速度を比較する方法を解説します。

Javaには似たようなメソッドがあるので、どちらを使えばいいのか悩むことがあります。

そんなときには処理速度を比較して速い方を選ぶといいでしょう!

次のプログラムでは、文字列を結合する「concatメソッド」「appendメソッド」の処理速度を比較しています。

実行結果

このプログラムでは、文字列を結合する「concatメソッド」と「appendメソッド」の処理速度を比較しています。

実行結果から、「appendメソッド」の方が処理速度が速いことがわかりました!

このようにメソッドの使い分けで悩んだときは処理速度で比較してみてください!

このプログラムで使用した文字列の結合については次の記事で詳しく解説しているので、興味のある方はぜひ確認してみてください。

【Java入門】Stringの結合方法(concat)
更新日 : 2019年1月18日

日時(Dateクラス)の使い方

この記事では処理速度の時間計測の方法を解説しました。

日時やカレンダーを使う方法を知りたい場合は次の記事を参考にしてください。

【Java】Dateクラスで日付を扱う方法を5つのパターン別に解説
更新日 : 2019年6月14日

まとめ

いかがでしたか?

今回はプログラムの処理にかかる時間計測の方法について解説しました。

ミリ秒単位や、ナノ秒単位など、必要に応じて精度変えて活用してください!

もし、処理時間を計測する方法を忘れてしまったらこの記事を確認してください!

未来に繋がるプログラミング学習、できていますか?

エンジニアと一口にいっても、フロントエンド、サーバーサイド、アプリ開発、AI関連など様々な業界や職種があり、業務内容や働き方、年収は変わります。

どんな働き方をしたいのか、どのくらい年収が欲しいのかなど具体的なキャリアパスを考えて、それを達成できる学習カリキュラムを考えていかないと、希望する方向性とは違うエンジニアになってしまったり、遠回りの学習に時間を費やしてしまう可能性があります。

侍エンジニア塾では目的から逆算する形で、まずあなたの目指すキャリアをヒアリングさせて頂いてからそれを達成するためのオリジナルの学習カリキュラムを作成しています。

今学んでいることが理想のエンジニアになるために繋がっているか不安でしたら、下記の無料体験レッスン予約カレンダーよりお気軽にご相談ください。

LINEで送る
Pocket

書いた人

中沢 丈

中沢 丈

フリーランスエンジニア。
システム開発からコンテンツ作成まで幅広く対応します。

連絡先はこちらです。
[email protected]

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説