指導教學:分析 Java 程序的側寫資料
目標
如果要分析從側寫 Java 程序所收集的資料,請依照下列方式來使用「側寫和記載」視景的「側寫和記載」視圖:
- 識別最耗時間的物件和方法
- 識別大量使用記憶體的類別
- 判斷程式並行性
- 尋找記憶體洩漏
- 以時間函數的方式瀏覽方法執行
- 以時間函數的方式取得更全面的執行行為視圖
- 識別作用中的執行緒
- 識別執行緒何時作用中
- 識別經常呼叫的方法
- 判斷記憶體回收
- 識別不同的程式執行階段
- 研究不同的方法呼叫
- 研究方法的呼叫端
所需時間
1 小時
開始之前
在開始本指導教學之前,您必須先:
- 安裝「Eclipse 平台」,包括 Hyades 工具。
- 備妥可匯入的範例側寫檔 (hcframe.jar)。檔案應該在下列目錄中︰
Hyades_install_dir\eclipse\plugins\org.eclipse.hyades.collection.framework_3.3.0
說明
在本指導教學中,您將使用不同的「側寫和記載」視圖來分析 PerformanceExample.class 範例。
這個範例會開啟一個含有兩個按鈕的頁框。
您將完成下列作業:
- 在工作台中開啟「側寫和記載」視景
- 側寫 PerformanceExample 類別
- 分析側寫資訊
如果要在監視應用程式時更新視圖,請按一下「重新整理視圖」按鈕
。
從 Window 功能表中,按一下開啟視景 > 其他 > 側寫和記載。
如果要側寫 PerformanceExample 類別,請遵循下列步驟:
- 按一下側寫下拉清單
和選取側寫。這時會開啟「啟動側寫」對話框。
- 按兩下外部 Java 應用程式來建立新的配置。
- 切換到主要標籤。
- 在類別名稱欄位中,輸入 org.eclipse.hyades.test.collection.framework.PerformanceExample。
- 按一下新增 JAR 來新增包含這個類別的 JAR。
- 選取 Hyades_install_dir\eclipse\plugins\org.eclipse.hyades.collection.framework_3.3.0\hcframe.jar
- 按一下開啟。這時會新增這個 JAR。
- 按一下側寫標籤。您可以在這個標籤中指定側寫準則。
- 按一下概觀標籤。您可以在這個標籤中指定過濾器集和內容。
- 按一下新增按鈕來建立新的側寫集。這時會開啟「新增側寫集」精靈。
- 在「側寫集」頁面中,指定這個側寫集的名稱,再按一下確定。
- 在「側寫類型」頁面中,展開標籤為記憶體分析的節點,選取基本記憶體分析,再勾選它旁邊的勾選框。這會新增記憶體相關資訊到應該從應用程式收集的資訊類型清單。
- 展開標籤為分析時間的節點,選取分析執行時間,再勾選它旁邊的勾選框。
當選取這個選項,您可以利用各個統計資料視圖來分析時間相關的資訊。您必須收集執行圖形詳細資料,才能使用「執行流程」和「方法呼叫」視圖。由於這個範例的目的是要向您介紹包括「執行流程」和「方法呼叫」視圖在內的所有側寫視圖,因此,請選取顯示執行流程圖形詳細資料。亦請按一下收集過濾條件集排除的界限類別勾選框,並將界限類別深度設為 1。按下一步。
- 「過濾條件集」頁面提供指定要分析之資訊子集的能力。如果要過濾不在要分析的界限內的類別或套件,這非常有用。
在所選過濾條件集的內容之下,按一下新增來新增需要收集其資料的類別或套件。這時會開啟「新增過濾條件」對話框。
- 若要側寫這個套件,請在類別輸入 org.eclipse.hyades.test.collection.framework.*。
- 指定方法名稱為 *,只併入這個範例的相關方法。
- 按一下確定。這時會將過濾準則加到內容清單中。
- 如果要從過濾條件內容清單中排除其他現有的類別,請按一下類別的「規則」直欄下的併入,將它變更為排除。
- 按一下完成。新的側寫集已新增至可用側寫集的清單中,且會將它強調顯示為要使用的側寫集。
- 按一下限制標籤。這個標籤會控制基於經歷時間或方法呼叫數目而收集的資料量。請接受預設值。
- 按一下目的地標籤。ProfileProject 和預設監視器是預設的側寫資源,它們可用來儲存這個側寫階段作業的資料。
- 按一下側寫。
- 這時會建立所需的側寫資源,且代理程式和程序會出現在「側寫監視器」視圖中。
- 選取分散式佈置來啟用監視器的檢視,如下列擷取畫面所示。這可讓您看到將資料分組的監視器 ,以及正在執行工作台的機器。

檢視經過一段時間的執行行為
您可以利用「執行流程」視圖來檢查應用程式的執行。
整個程式的執行過程都會呈現在這個視圖中。它會在垂直軸上顯示時間。
- 在「側寫監視器」視圖中,選取您的監視器,按一下滑鼠右鍵來選取開啟工具 > 執行流程來開啟「執行流程」視圖。這時會開啟「執行流程」視圖。
- 如果要檢查特定方法,請按一下方法名稱(或它下面的空白字元)來選取它。接著,它呼叫的所有方法都會以黃色強調顯示。強調顯示的區域的垂直長度會指出方法的基本時間。
基本時間的正確值將顯示在狀態行。

將游標移動到視圖中的任何物件上,會在視窗底端的狀態列中顯示詳細的資訊。
- 使用放大工具
來啟用游標,然後點按以放大區域。
附註:如果要在監視應用程式時更新視圖,請按一下重新整理視圖按鈕
。
識別作用中的執行緒
在「執行流程」視圖中,每一個執行緒都含有活動期間,這些期間是以大量的方法呼叫來加以識別。在符號表示法,第一個呼叫的方法是線條,而且它後續呼叫的方法將以其他線條出現在它的右邊。方法呼叫的順序是由左至右;執行緒的作用中部分是由這個由左至右進度加以識別。
當您選取概述方法呼叫順序的整個區段時,花費在執行該順序的基本時間將顯示在狀態行。如果要查看執行緒作用中的基礎時間,請找出下列時間之間的差異:
- 指向所選的黃色區域的頂端水平線,在狀態行顯示對應的基本時間。
- 同樣地,指向黃色選取區的下邊緣(當方法順序作用時,它會蓋住執行期間),然後檢視該時刻的基本時間。
要訣
- 如果圖形太擠不易閱讀,請放大
擁擠的區域。
- 當您選取某個方法時,其呼叫的所有方法都會以黃色強調顯示。
- 您可以在工作台中拖放視圖,並依需要將它們同步排列。
- 不論您將游標指向何處,狀態列中都會指出對應的基本時間。
- 如果要重設視圖的顯示,按一下首頁按鈕。
識別經常呼叫的方法
如果要識別經常呼叫的方法:
- 使用「縮放」工具
來放大一序列的方法呼叫。
- 尋找所選的區域內是否有同色的線條。這些線條會識別來自同一類別實例(已被呼叫多次)的方法。
- 檢查不同顏色的線條的長度(每一線條代表一種方法)。
線條越長,方法的執行時間就越長。
判斷記憶體回收
正常情況下,不可能經由在這個視圖中檢查使用者執行緒中的線條,而得知物件是否發生了記憶體回收。
請遵循下列步驟:
- 依預設,會隱藏記憶體回收執行緒。若要啟用,請在視圖的快速功能表下選取執行緒 > GC。
- 檢查位在這個視圖最左邊的直欄。這個直欄保留給記憶體回收執行緒,因此稱之為 GC 執行緒直欄。
- 檢查在 GC 執行緒直欄中是否有單一的細矩形。或許可以在物件上的大多數方法呼叫中找到矩形。
每當物件發生記憶體回收時,這個矩形就會出現在 GC 執行緒直欄。
識別程式執行的階段
識別起始設定階段
- 使用「放大」工具
,來放大主要執行緒頂端一序列的方法呼叫。
- 請注意標示 -init- 的方法。
- 按一下以選取這類方法。狀態列會更新,指出方法會協助起始設定(指定值給應用程式中所使用的變數)。
使用「方法呼叫」視圖來分析方法
- 從「側寫監視器」中,選取監視器或代理程式。按一下滑鼠右鍵,然後選取開啟工具 > 執行流程。這時會出現「執行流程」視圖。
- 從「執行流程」表格中,展開您要檢查的執行緒。選取您要瞭解的方法,按一下滑鼠右鍵,選取顯示方法呼叫。
- 使用「放大」工具
來放大一段顯示畫面。這些線條是按照類別編寫顏色碼,並透過代表方法呼叫的水平線加以連接。
- 按一下方法名稱來選取方法。
- 按一下重新整理視圖按鈕
,確定您所檢視的是現行資訊。
- 注意下面這一行:

這一行顯示了方法的名稱,後面接著 n/m,其中 n 是目前所顯示的呼叫數,相對於呼叫總數 m。
- 按一下上一頁
和下一頁
來瀏覽所選定方法的所有呼叫(或所選定物件的每一則訊息)。
工具列上的分數會變更,以指出您正在檢視哪一個呼叫。
找出方法的呼叫端
如果要找出呼叫方法的程式,請繼續在「方法呼叫」視圖中進行以下步驟:
- 如果要檢視方法的呼叫端,請按一下顯示呼叫端按鈕
。
這時會顯示方法,方法左側會顯示它的呼叫端。
- 如果要針對您所檢視的每一個新呼叫檢視關於方法呼叫端的詳細資料,請將游標定位在視圖中代表呼叫端的線條上。
狀態行將顯示呼叫者的資訊。
- 如果要察看所選定方法所呼叫的方法, 請按一下顯示呼叫的方法按鈕
。
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.