0

Java プログラムの所要時間を記録したいと考えています。ほとんどのフォーラムでは、次のような提案がされています。

int starttime=System.nanoTime();  
//program code  
int endTime=System.nanoTime();  
int timetaken=starttime-endTime;  

このアプローチの問題は、複数のプログラムが実行されている場合、 endTime と starttime の差がプログラムの所要時間ではないことです。これは、CPU などでのさまざまなプログラムのスケジューリングにかかった時間でもあります。ただし、プログラムにかかった時間を記録したいだけです。今回はどうやって入手するの?

4

1 に答える 1

2

あなたはこの記事で答えを見つけることができます。記事から引用するには:

ManagementFactoryを呼び出します。getThreadMXBean()を使用して、現在のJVMスレッドを記述するThreadMXBeanを取得します。BeanのgetCurrentThreadCpuTime()メソッドは、現在のスレッドのCPU時間を返します。getCurrentThreadUserTime()メソッドは、スレッドのユーザー時間を返します。これらのレポート時間は両方ともナノ秒単位です

アプリケーションがマルチスレッドの場合、アプリケーションスレッドごとのCPU時間を記録し、それらを合計して、すべてのスレッドでアプリケーションが使用する合計CPU時間を取得する必要があります。

そうは言っても、CPU消費量のプロファイリングに真剣に取り組んでいるのであれば、おそらくプロファイラーを使用する必要があります。visualvm (jdkにもバンドルされています)のような無料のオープンソースから始めることができます。これは(他の多くのものの中でも)この正確な質問に非常に簡単に答えます。

于 2013-02-09T14:11:14.027 に答える