用MAT分析记忆 - 关于UTF字符的问题

时间:2011-02-23 15:48:45

标签: java memory utf-8 duplicates analysis

我得到一个.hprof文件,我正在使用Eclipse Memory Analyzer(MAT)进行分析。

我运行 Top Component 报告,在 Duplicate Strings 部分,MAT检测到一些内容相同的String实例。

我正在为String.intern()和其他家庭作业工作,但现在这不是我的问题。 该报告向我展示了重复的字符串:

  • \ u0000的\ u0000的\ u0000的\ u0000的\ u0000的\ u0000的\ u0000的\ u0000的\ u0000的\ u0000的....
  • \ u000a \ u0009 \ u0009
  • \ u000a \ u0009 \ u0009 \ u0009 \ u0009 等等。

其他字符串是可读的,但是,这些字符串怎么样?我认为它们来自XML解析(我在我的应用程序中使用JibX)。

我的问题是:

  • 您认为这些字符串会怎样?我怎样才能更好地分析它们?
  • 如果它们来自XML解析或其他内容,我如何在解析后清理/清除它们?也许是JibX 1.0.1发布这些问题太旧了?

对于这些 UTF-8类似字符串的任何建议都将非常感激。提前谢谢。

2 个答案:

答案 0 :(得分:1)

有趣的是看到Strings有很多\ u0000个字符,这是非常罕见的,因为字符串在Java中不以0结尾,因此它们是从String(byte [])构造函数创建的,也许是String( byte [],encoding)构造函数,来自包含0的字节数组。

我会使用分析器并分析这些构造函数的调用图。然后你会找到罪魁祸首。

答案 1 :(得分:1)

您可以右键单击可疑字符串,然后选择列出对象/使用传入引用。这将显示引用您的字符串的对象。

incoming references