入門︰記憶體洩漏分析

記憶體洩漏(當物件沒有適當地保存參照時,在 Java™ 中常發生這種情況)會使效能退化,最終導致程式當掉。「側寫和記載」視景包括一些視圖,用來分析應用程式的記憶體用量並偵測這些洩漏。

下列視圖可用於記憶體洩漏分析:

識別出洩漏之後,您可以使用 Probekit 設計自訂探針來探索可能會洩漏的特定物件。

如果要快速識別洩漏候選項,請利用「記憶體洩漏分析」側寫集的側寫來執行記憶體洩漏分析。您也可以藉由「記憶體分析」側寫集的側寫來檢查記憶體用量;您可以利用「物件參照圖」、「物件參照」和「物件詳細資料」視圖來瀏覽這項資料,但是您無法使用這些資料來產生洩漏候選項清單。

上層主題: 開始使用執行時期問題判斷

執行記憶體洩漏分析

記憶體洩漏分析使用進階的演算法,根據兩個資料堆傾出的比較來識別可能的記憶體洩漏。 您可以定義側寫配置來手動擷取資料堆傾出,或是在側寫集中指定時自動擷取傾出。

必備條件:

分析洩漏:

  1. 在「側寫」對話框的「側寫」標籤中,選取記憶體洩漏分析 - 手動資料堆傾出, 或選取記憶體洩漏分析 - 定時資料堆傾出側寫集。
  2. 按一下側寫以啟動應用程式。 「洩漏候選項」視圖開啟並顯示側寫執行的狀態資訊。
  3. 如果是擷取手動資料堆傾出,請執行下列動作:
    1. 預備好應用程式:等到應該在記憶體中的所有項目都在記憶體中之後,才使用應用程式。 執行您欲調查多次的交易。
    2. 按一下「洩漏候選項」視圖中的「擷取資料堆傾出」按鈕 「擷取資料堆傾出」按鈕來擷取第一個資料堆傾出。資料堆傾出會新增到「側寫監視器」做為側寫資源。
    3. 執行您要調查更多次的交易。
    4. 擷取第二個資料堆傾出。現在,您可以終止您的應用程式。
  4. 如果是擷取計時的資料堆傾出,請讓您的應用程式一直執行到「洩漏候選項」視圖指出已擷取資料堆傾出而且可以開始分析為止。依預設,經過 10 分鐘(600 秒)之後會擷取第一個資料堆傾出,經過另一個 10 分鐘之後會擷取第二個資料堆傾出。現在,您可以終止您的應用程式。
  5. 在「洩漏候選項」視圖中,按一下「分析洩漏」按鈕 「分析洩漏」按鈕
  6. 「選取洩漏分析選項」對話框中,按一下確定。 當分析完成時,「洩漏候選項」視圖會列出在第二個資料堆傾出時,在資料堆中仍保留物件參照的物件,最先列示的物件代表最有可能洩漏記憶體。
  7. 按兩下最有可能的洩漏候選項,將它顯示在「物件參照圖」視圖中。 圖形會強調顯示洩漏的根(保存參照的物件)和可能是洩漏物件之間的路徑;這可讓您導覽整個圖形。您可以暫停游標在任何物件或路徑區段上來顯示其相關統計資訊。利用這個方法,您可以探索已保存了多少記憶體,以及考慮是否有可能移除任何的參照。
  8. 按兩下「物件參照圖」視圖中的物件,在「物件詳細資料」視圖中顯示物件資訊。 這個視圖以列表格式來顯示現行物件的所有相關資訊,包括關於物件的參照者(參照現行物件的物件)和被參照者(現行物件參照的物件)的其他資料。

現在可以修改您的程式碼,清除不再有用的參照,讓記憶體回收器可以收集不需要的物件。重新側寫您的應用程式,驗證已經修正洩漏,並偵測其他的洩漏。

如需詳細資訊,請參閱分析記憶體洩漏

使用記憶體分析來調查記憶體用量

「記憶體分析」側寫集(含有「記憶體/洩漏分析」側寫類型)可讓您收集物件參照並檢視資料堆傾出。請注意,您可以在「物件參照圖」、「物件參照」和「物件詳細資料」視圖中檢視這項資料,但是您無法使用這些資料來產生洩漏候選項清單。

調查記憶體用量:

  1. 在「側寫」對話框的「側寫」標籤中, 選取記憶體分析側寫集。 請注意此側寫集不會自動識別洩漏候選項。
  2. 按一下側寫以啟動應用程式。
  3. 操作應用程式需要分析的部分。
  4. 在「側寫監視器」中,用滑鼠右鍵按一下代理程式側寫資源,然後從蹦現功能表選取「收集物件參照」。現在,您可以終止您的程式。側寫資源以及針對執行所收集的資料會出現「側寫監視器」中。
  5. 如果要顯示物件參照,請用滑鼠右鍵按一下側寫資源並從蹦現功能表選取開啟工具...,再選取要顯示的視圖名稱。
Terms of use | Feedback
(C) Copyright IBM Corporation 2000, 2004. All Rights Reserved.