2011-02-23 24 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