Javaプログラムの実行時間統計
2503 ワード
コードを書く時、特に時間に対する要求が高い仕事を完成する時、私達はよく統計プログラムの実行時間が必要です。全体の考え方はもちろん簡単です。プログラムの起動と終了後にそれぞれ現在の時間を記録します。両者は減量して、プログラムの運行時間を得ました。いくつかの一般的な方法を紹介します。具体的な利用状況はプロジェクトの必要に応じて選択できます。
一、簡単な方法
1.1 System.current TimeMillis()
皆さんの第一印象はきっとSystem.current TimeMillisです。そうですこれは一番簡単な時間統計に使うことができます。ユーザが手動でシステム時間を調整する。 システムは時間サーバによって自動的に時間を調節する。 冬時間、夏時間がある地域は自動的に時間を調節します。 閏秒(Leap seconds)は、この閏秒は多くのシステムが切断されています。 この方法は開発段階では時間をざっと見積もっても大丈夫ですが、生産環境を使うと大きなリスクがあります。
1.2 System.nanoTime()
nanoTime()は、current TimeMillis()とは正反対で、システム時間とは全く関係なく、目的もプログラムの時間消費を統計するために用いられている。nanoTime()に記録されているのは、ある一定の時刻から、今までどれぐらいのナノ秒が経過していますか?しかし、この固定時刻はUnixタイムスタンプの1970-1-1 00:00ではなく、仮想マシンを起動する際に生成される固定時刻であり、仮想マシンの生成時間はそれぞれ異なる。
nanoTime()はナノ秒まで正確ですが、ナノ秒ごとに一つの型を打っているのではなく、3ナノ秒後に一気に3コマ打つ可能性があります。しかし、少なくともcurrent TimeMillis()と同じように正確であることが保証される。
nanoTime()を使用する統計方法は、current TimeMillis()と同じで、以下の通りである。
Java 8以上は新しい万年暦を定義しています。Java epochに基づいて、一日を正確に86400秒に分けます。新しいインスタグを使う方法は以下の通りです。
StopWatchはAppche Commons Langライブラリの一部です。便利に時間を計ることができます。
まずmavenライブラリを追加します。https://www.baeldung.com/java-measure-elapsed-time https://docs.oracle.com/javase/8/docs/api/java/lang/System.html#nanoTime https://docs.oracle.com/javase/8/docs/api/java/time/Instant.html https://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/time/StopWatch.html
一、簡単な方法
1.1 System.current TimeMillis()
皆さんの第一印象はきっとSystem.current TimeMillisです。そうですこれは一番簡単な時間統計に使うことができます。
long start = System.currentTimeMillis();
// ...
long end = System.currentTimeMillis();
long timeElapsed = finish - end; //
System.current TimeMillis()はシステムの現在時刻(Wall-clock Time)から1970-1-1 00:00の経過時間であり、単位はミリ秒であることを記録している。システムの現在の時間は具体的にどういう意味ですか?current TimeMillis()は正確に1 msまでではなく、オペレーティングシステムの具体的な実現に関連しています。この方法を使うと問題があります。システムの時間はいつでも調節できます。たとえば:1.2 System.nanoTime()
nanoTime()は、current TimeMillis()とは正反対で、システム時間とは全く関係なく、目的もプログラムの時間消費を統計するために用いられている。nanoTime()に記録されているのは、ある一定の時刻から、今までどれぐらいのナノ秒が経過していますか?しかし、この固定時刻はUnixタイムスタンプの1970-1-1 00:00ではなく、仮想マシンを起動する際に生成される固定時刻であり、仮想マシンの生成時間はそれぞれ異なる。
nanoTime()はナノ秒まで正確ですが、ナノ秒ごとに一つの型を打っているのではなく、3ナノ秒後に一気に3コマ打つ可能性があります。しかし、少なくともcurrent TimeMillis()と同じように正確であることが保証される。
nanoTime()を使用する統計方法は、current TimeMillis()と同じで、以下の通りである。
long start = System.nonoTime();
// ...
long end = System.nonoTime();
long timeElapsed = finish - end; //
二、Java 8以上Java 8以上は新しい万年暦を定義しています。Java epochに基づいて、一日を正確に86400秒に分けます。新しいインスタグを使う方法は以下の通りです。
Instant start = Instant.now();
// ...
Instant end = Instant.now();
long timeElapsed = Duration.between(start, finish).toMillis(); //
三、第三方倉庫StopWatchStopWatchはAppche Commons Langライブラリの一部です。便利に時間を計ることができます。
まずmavenライブラリを追加します。
org.apache.commons
commons-lang3
3.7
そしてコードの中:StopWatch watch = new StopWatch();
watch.start();
// ...
watch.stop();
System.out.println("Time Elapsed: " + watch.getTime() + "ms"); //
参考: