2011-02-23 48 views
1

我得到一個.hprof文件,我正在用Eclipse內存分析器(MAT)分析它。用MAT分析內存 - 有關UTF字符的問題

我跑頁首組件報告,在重複的字符串部分,MAT檢測內容相同的一些字符串實例。

我正在爲String.intern()和其他家庭作業,但現在這不是我的問題。 該報告顯示我重複的字符串像這樣:

  • 符\ u0000 \ u0000的符\ u0000 \ u0000的符\ u0000 \ u0000的符\ u0000 \ u0000的符\ u0000 \ u0000的....
  • \ u000a \ u0009 \ u0009
  • \ u000a \ u0009 \ u0009 \ u0009 依此類推。

其他字符串是可讀的,但是,這些怎麼樣?我認爲他們來自XML解析(我在我的應用程序中使用JibX)。

我的問題是:

  • 您如何看待這些字符串來了?我怎樣才能更好地分析它們?
  • 如果它們來自XML解析或其他內容,那麼在解析後如何清理/清除它們?也許是JibX 1.0.1 Release對於這些問題太老了?

對這些的任何建議UTF-8像字符串將不勝感激。提前致謝。

回答

1

您可以右鍵單擊可疑字符串並選擇列出對象/使用傳入引用。這會顯示引用您的字符串的對象。

incoming references

+0

謝謝。這對我來說非常有幫助。我得到這些字符串的起源!他們來自使用Apache Commons Configuration讀取XML文件。從文件讀取並獲取參數後,我完成了_.close()_並且它可以工作!非常感謝 – 2011-03-08 06:30:05

1

有趣的是,看到帶有許多字符的字符串,這是非常罕見的,因爲字符串在Java中不是以0結尾,因此它們是從String(byte [])構造函數創建的,也許是String (byte [],encoding)構造函數,從包含0的字節數組中取出。

我會使用一個分析器並分析這些構造函數的調用圖。然後你會找到罪魁禍首。

+0

+1 - 好的理論......必然結果是,有可能是導致您的應用程序啓動未初始化的字節數組內容轉換爲字符串的錯誤。 – 2011-02-23 16:10:18