运行时堆分析; when是一个初始化的String,它与模式匹配

时间:2014-06-23 01:03:08

标签: java profiling heap-memory heap-dump

我有一个Java程序,在某些时候最终会创建一个由" schema.sql"匹配的字符串。我想找到源代码中发生这种情况的位置。正在搜索" schema.sql"在源代码上不会产生位置。相反,程序必须在运行时创建字符串。我只是不知道在哪里。它发生在我项目的某个库中。如何找到我的程序创建此字符串的位置?

我可以在运行时以某种方式查看与#34; schema.sql"匹配的字符串的堆吗?我查看了像VisualVM这样的东西,但看起来它只分析堆转储,而不是堆的运行状态。必须有办法做到这一点;有任何想法吗?

1 个答案:

答案 0 :(得分:2)

您可以使用JProfiler执行此操作,并执行以下步骤:

1)通过在会话启动对话框中配置适当的分配记录配置文件,在启动时开始分配记录。

enter image description here

2)在您认为已创建字符串后拍摄堆快照

3)双击堆walker的classes视图中的java.lang.String行,创建一个包含所有字符串的新对象

4)切换到"传出参考视图"

5)通过选择"应用过滤器 - >搜索字符串:限制所选值"并输入字符串值

enter image description here

6)切换到分配视图并检查堆栈跟踪

enter image description here

免责声明:我公司开发JProfiler。