哪个调试工具可以列出内部化的字符串?

Gui*_*oté 19 java string string-interning

我正在寻找一个可以列出已经内化的字符串的调试工具?理想情况下,我想添加一个标记并列出在该标记之后添加的字符串列表.

提前致谢.

ddi*_*rov 1

在最近的 Hotspot VM 上,interned 字符串看起来就像任何其他字符串 - 唯一的区别是 VM 正在跟踪底层 char 数组(我认为它有一个额外的 JNI 引用,但它不会显示在 YourKit 转储上 - 将是调查起来很有趣)。

也就是说,Yourkit 提供了对重复字符串的内存检查,我相信这可以满足您的需要。如果将其与“跟踪分配”结合起来,您可以直接找到分配这些字符串的代码。

请参阅http://www.yourkit.com/docs/95/help/inspections_mem.jsp#duplicate_strings

--

获取两个时间点之间添加的字符串列表更容易:

  1. 使用 jmap 或您最喜欢的分析器获取两个堆转储
  2. 对堆进行比较
  3. 显示 String 类的所有实例

应该可以使用任何分析器甚至jhat(如果您足够耐心)。如果您使用 YourKit,则可以使用书签功能并仅拍摄一张堆快照。