有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java运行时堆分析;匹配模式的字符串何时初始化

我有一个Java程序,它最终会在某个时刻创建一个与“schema.sql”匹配的字符串。我想在源代码中找到发生这种情况的地方。在源代码上搜索“schema.sql”不会产生位置。相反,程序必须在运行时创建字符串。我只是不知道在哪里。它发生在我项目的某个图书馆里。我怎样才能找到我的程序在哪里创建这个字符串

我是否可以在运行时观察堆中是否有与“schema.sql”匹配的字符串?我研究了VisualVM之类的东西,但它似乎只分析堆转储,而不是堆的运行状态。一定有办法做到这一点;有什么想法吗


共 (1) 个答案

  1. # 1 楼答案

    您可以通过以下步骤使用JProfiler实现这一点:

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

    enter image description here

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

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

    4)切换到“输出参考视图”

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

    enter image description here

    6)切换到allocations视图并查看堆栈跟踪

    enter image description here

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