gpt4 book ai didi

java - 在 Java 调试 session 期间查找大字符串分配

转载 作者:搜寻专家 更新时间:2023-10-31 19:54:58 26 4
gpt4 key购买 nike

在分析堆转储后,我发现分配了一些 30MB 的字符串(单个字符串 30MB)。
有没有办法在调试应用程序时设置断点,以便我可以找到分配这些巨大字符串的代码?由于在应用程序运行期间分配了数千个字符串,因此不可能仅在每个字符串分配上放置一个断点。我相信条件断点也会太慢。
如果可能的话,我想检查这些字符串内容以了解这些分配的来源。
例如,它们可能是 Web 服务调用的结果,该调用通常使用少量数据调用,但在极少数情况下会使用大量输入(这是我想要查找的情况)。

最佳答案

虽然您明确要求进行调试 session ,但我认为这主要是为了解决实际问题:分配了大字符串,而您不知道这是在哪里发生的。 p>

可以使用 jVisualVM 跟踪分配情况.您可以启动 jVisualVM 和您的程序,并将 jVisualVM 连接到您的程序。

如果这不符合您的需要,我可以删除这个答案。否则,您可以这样做:

在“Profiler”选项卡中,您可以选中右上角的“Settings”复选框,然后选择“Memory Settings”选项卡。您可以在那里设置“记录分配堆栈跟踪”复选框:

StringAlloc01

然后,在按下顶部的“内存”按钮后,探查器将收集有关字符串分配的信息。应用程序退出后(或拍摄快照后),您可以检查记录的堆栈跟踪以找到分配大字符串的方法 - 在本例中,method4:

StringAlloc02

关于java - 在 Java 调试 session 期间查找大字符串分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25357785/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com