以下の方法を数回使用しましたが、成功しました。マルチスレッドのベンチマークに興味がある場合は、ページの下部にあるリンクを参照してください。
CPU、システム、およびユーザー時間を使用し
たシングルスレッド タスクのタイミング CPU、システム、およびユーザー時間を使用したシングルスレッド タスクのタイミング
Java 1.5 では、JVM を監視するための java.lang.management パッケージが導入されました。パッケージのエントリ ポイントは ManagementFactory クラスです。その静的メソッドは、JVM 情報を報告するさまざまな「MXBean」オブジェクトを返します。そのような Bean の 1 つは、スレッド CPU とユーザー時間を報告できます。
ManagementFactory を呼び出します。getThreadMXBean() を使用して、現在の JVM スレッドを記述する ThreadMXBean を取得します。Bean の getCurrentThreadCpuTime() メソッドは、現在のスレッドの CPU 時間を返します。getCurrentThreadUserTime() メソッドは、スレッドのユーザー時間を返します。これらは両方ともナノ秒単位で時間を報告します (ただし、時間とナノ秒の精度 (の欠如) に関する付録を参照してください)。
ただし、最初に必ず isCurrentThreadCpuTimeSupported() を呼び出してください。false (まれ) が返される場合、JVM 実装または OS は CPU またはユーザー時間の取得をサポートしていません。その場合、壁掛け時計の使用に戻ります。
import java.lang.management.*;
/** Get CPU time in nanoseconds. */
public long getCpuTime( ) {
ThreadMXBean bean = ManagementFactory.getThreadMXBean( );
return bean.isCurrentThreadCpuTimeSupported( ) ?
bean.getCurrentThreadCpuTime( ) : 0L;
}
/** Get user time in nanoseconds. */
public long getUserTime( ) {
ThreadMXBean bean = ManagementFactory.getThreadMXBean( );
return bean.isCurrentThreadCpuTimeSupported( ) ?
bean.getCurrentThreadUserTime( ) : 0L;
}
/** Get system time in nanoseconds. */
public long getSystemTime( ) {
ThreadMXBean bean = ManagementFactory.getThreadMXBean( );
return bean.isCurrentThreadCpuTimeSupported( ) ?
(bean.getCurrentCpuTime( ) - bean.getCurrentThreadUserTime( )) : 0L;
}
これらのメソッドは、スレッドが開始されてからの CPU、ユーザー、およびシステム時間を返します。スレッドの開始後にタスクの時間を計るには、タスクの前後にこれらの 1 つ以上を呼び出し、差をとります。
long startSystemTimeNano = getSystemTime( );
long startUserTimeNano = getUserTime( );
... do task ...
long taskUserTimeNano = getUserTime( ) - startUserTimeNano;
long taskSystemTimeNano = getSystemTime( ) - startSystemTimeNano;
http://nadeausoftware.com/articles/2008/03/java_tip_how_get_cpu_and_user_time_benchmarking#TimingasinglethreadedtaskusingCPUsystemandusertimeから取得