2017-02-04 81 views
0

我想知道如何計算Java或Python中函數的CPU週期。爲Java函數計算CPU週期

我在Java中嘗試了用:

(OperatingSystemMXBean)ManagementFactory.getOperatingSystemMXBean(); osbean.getProcessCpuTime();

但沒有結果。

+2

這不是一個小問題。以下是Java的一個很好的起點:http://stackoverflow.com/questions/504103/how-do-i-write-a-correct-micro-benchmark-in-java – NPE

+0

在Java中執行任何操作所需的時間Java因許多因素而異。相同的功能可能需要50毫秒或根本不需要時間,具體取決於它的功能和運行方式。 –

回答

2

在Python

使用timeit.default_timer();它使用平臺的最準確的選擇。在Ubuntu中,這將使用time.time()來代替。

timeit.default_timer()以平臺特定的方式定義默認計時器。在Windows上,time.clock()的粒度爲微秒,但time.time()的粒度爲1/60th。在Unix上,time.clock()具有第二個粒度的1/100th,並且time.time()更精確。在任一平臺上,default_timer()都會測量掛鐘時間,而不是CPU時間。這意味着在同一臺計算機上運行的其他進程可能會影響計時。

在JAVA

  1. System.currentTimeMillis()將只測量wall-clock time,從來沒有CPU時間。
  2. 如果您需要掛鐘時間,那麼System.nanoTime()通常比currentTimeMillis()更精確(且從不差)。
  3. ThreadMXBean.getThreadCPUTime()可以幫助您找出給定線程已使用多少CPU時間。使用ManagementFactory.getThreadMXBean()可以獲得ThreadMXBean和Thread.getId()以找到您感興趣的線程的id。請注意,每個JVM都不需要支持此方法!