我正在編寫一個讀取輸入,填充數據結構,然後對它們進行一些計算的Java應用程序。我想優化最後的計算部分,因爲有了真正的大輸入,它會支配執行時間。用巨大的投入來分析整個應用程序將會一直持續下去。因此,我爲性能測試加載了中等大小的輸入,但輸入和預處理時間在配置文件中占主導地位。只分析Java應用程序的某些部分/類
我該如何配置一個我關心的java應用程序的部分?有沒有辦法說「只分析這兩個類」,或者以編程方式插入「開始分析這裏」指令?
我正在編寫一個讀取輸入,填充數據結構,然後對它們進行一些計算的Java應用程序。我想優化最後的計算部分,因爲有了真正的大輸入,它會支配執行時間。用巨大的投入來分析整個應用程序將會一直持續下去。因此,我爲性能測試加載了中等大小的輸入,但輸入和預處理時間在配置文件中占主導地位。只分析Java應用程序的某些部分/類
我該如何配置一個我關心的java應用程序的部分?有沒有辦法說「只分析這兩個類」,或者以編程方式插入「開始分析這裏」指令?
您可以使用VisualVM來分析您的代碼。我不知道只分析特定的類,但VisualVm可以開始觀看已經運行的程序。另外,如果您使用的是Eclipse,則有一個啓動程序可用於在您從Eclipse啓動時啓動並將分析器附加到程序。
編輯:
我做了一些前瞻性和事件探查器選項卡有一個設置複選框。當您選擇此選項時,它將顯示一個文本框,您可以在該文本框中設置篩選哪些類應針對CPU使用情況進行配置的篩選器。
我假設你有單元測試,你可以構造一個單元測試或應用程序,它只是對你感興趣的部分進行分析。通過這種方式,您可以單獨調整性能,因爲它是唯一運行的。
單元測試用非常小的輸入測試正確性。即使在那裏,大部分時間都花在預處理上。爲了獲得有意義的性能數字,我需要運行大量輸入,這需要時間來加載。沒有加載任何數據,我無法測試我的算法。 – 2012-02-23 16:26:32
數據的實際情況如何?通常生成的數據更輕,可以給你逼真的性能結果。 – 2012-02-23 20:28:38
如果您必須擁有真實數據,您可以在運行算法之前停止程序,開始分析並讓程序繼續。這樣你只能分析從這一點開始運行的內容。 – 2012-02-23 20:29:33
至於只分析選定的類,大多數分析器允許設置過濾器,以便只有幾個類被檢測。
就你而言,它聽起來像你還想在調用特定方法時啓動和停止分析。
在JProfiler,可以添加一個方法觸發爲所期望的方法和添加3個動作來觸發:
看看this screen cast,它顯示瞭如何配置觸發器。
免責聲明:我公司開發JProfiler。
結合一個保存我的過濾器和明智放置的'Thread.sleep(5000)'的預設,它可以完成工作。 :)雖然這是最先進的技術,但令人傷心的是。 – 2012-02-23 17:52:09