2014-01-08 41 views
1

我有幾個java類文件,每個文件都有一個主要方法。由於這些是已編譯的類,因此我無法修改代碼並在調用類的main方法之前和之後跟蹤系統時間。有什麼辦法可以從JVM或任何其他工具(最好是命令行)獲得此度量?如何測量預編譯的java類的執行時間?

+1

不知道你需要什麼級別的精度,但linux有內置時間命令http://www.thegeekstuff.com/2012/01/time-command-examples/ – niiru

+0

謝謝,這應該給我一個開始。但是這段時間還沒有包含JVM本身在程序運行之前加載的時間?能夠跟蹤JVM執行程序所用的時間會很棒。 –

+0

它可能不會來自命令行,但你可以使用'profiler'。 –

回答

0

您可以實現這樣一個類:

class caller { 
     public static void main(String[] args) { 
       long initialTime = System.currentTimeMillis(); 
       precompiled_class_name.main(args); 
       long finalTime = System.currentTimeMillis(); 
       System.out.println("Spent time: " + (finalTime - initialTime)); 
     } 
} 

如果您需要更多的內部信息,使用一個分析器像這樣的:http://jrat.sourceforge.net/

java -javaagent:shiftone-jrat.jar caller 

這是命令行,但你會需要桌面應用程序來讀取結果。

0

創建一個空白的空應用程序無所事事,啓動時間。

計時測試應用程序。

減去差異。

請注意,您正在遇到各種與JIT,課程加載時間等有關的問題,這些問題會影響您的測量精度。至少你需要重複測試很多次。

雖然測量本身也沒有意義。如果你看看你爲什麼想知道這個問題,可能會更好,因爲看看你是否可以問一個更有用的問題。

+0

謝謝。做這種測量的原因是憑經驗測量使用某些特定的代碼片段對程序執行時間的影響。但我所有的都是.class文件。你有沒有更好的方法來解決這個問題的建議? –

+0

將類文件加載爲庫,編寫基準測試程序以加載該庫,並針對要測量的實際調用運行速度測試。瞭解微觀基準陷阱 –

+0

http://stackoverflow.com/questions/20655963/java-benchmarking-why-is-the-second-loop-faster/20655996#20655996 –