java运行时堆分析;匹配模式的字符串何时初始化
我有一个Java程序,它最终会在某个时刻创建一个与“schema.sql”匹配的字符串。我想在源代码中找到发生这种情况的地方。在源代码上搜索“schema.sql”不会产生位置。相反,程序必须在运行时创建字符串。我只是不知道在哪里。它发生在我项目的某个图书馆里。我怎样才能找到我的程序在哪里创建这个字符串
我是否可以在运行时观察堆中是否有与“schema.sql”匹配的字符串?我研究了VisualVM之类的东西,但它似乎只分析堆转储,而不是堆的运行状态。一定有办法做到这一点;有什么想法吗
# 1 楼答案
您可以通过以下步骤使用JProfiler实现这一点:
1)通过在会话启动对话框中配置适当的分配记录配置文件,在启动时启动分配记录
2)在认为字符串已创建后,拍摄堆快照
3)双击heap walker的classes视图中的
java.lang.String
行,创建一个包含所有字符串的新对象集4)切换到“输出参考视图”
5)通过选择“应用过滤器->;通过限制所选值”并输入字符串值来搜索字符串
6)切换到allocations视图并查看堆栈跟踪
免责声明:我的公司开发JProfiler