gpt4 book ai didi

java - 如何使用触发器在 JProfiler 离线模式下进行分析时自动获取保留内存

转载 作者:太空宇宙 更新时间:2023-11-04 06:56:33 33 4
gpt4 key购买 nike

我有一个大型、内存密集型、基于 Java 的 Web 应用程序,它具有许多不同的功能,需要花费很长时间来进行分析。我认为一种更省时的方法是在离线模式下运行 JProfiler 并设置触发器来为我捕获数据,而不是使用不同的测试数据手动分析整个应用程序中的每个功能。测试团队将正常使用该软件,随着时间的推移,JProfiler 将捕获内存密集型热点,我们可以使用这些热点来提高应用程序的效率。

但是,如果我设置一个触发器来拍摄堆快照,那么它只会给我浅层内存——每个类的内存统计信息,不包括它包含的任何引用的对象。但了解 String 或 char[] 实例消耗了多少内存对我来说没有用。我真正想知道的是我的类的保留内存——每个实例的浅层大小加上它包含的所有类的内存。换句话说,对于我的软件中的每个类,我想知道当其所有实例都被垃圾收集时将释放多少内存。

所以基本上我有几个问题:

1)JProfiler可以只触发快照而不记录内存来计算保留内存吗?看来你必须实际执行“记录内存”操作来计算保留的内存,但我可能遗漏了一些东西。

2)如果我必须记录内存来计算保留的内存信息,那么我的下一个想法是设置一个触发器,当总体内存达到某个阈值时记录信息。但这又提出了两个问题:如何设置触发器来停止录制并拍摄快照?由于我们已经超过了触发器中指定的阈值,录制会不会错过最重要的内存信息?

上面的第二点让我相信,最好的分析方法是触发快照,而不对保留内存进行任何记录和计算——只有浅内存。但是,如果浅层内存显示我的大部分内存使用量都在 char[] 中(确实如此),我怎样才能从中获取有用的信息呢?这如何帮助我跟踪应用程序的内存密集型区域?

非常感谢任何帮助

最佳答案

1) Can JProfiler calculate the retained memory by just triggering snapshots without recording the memory? It seems that you have to actually perform the "record memory" action to calculate the retained memory, but I might be missing something.

您实际上需要“触发堆转储”操作,然后堆遍历器将可用。启用“分配数据”的“开始记录”操作会记录实时 View 的数据(其中仅提供浅层大小),但它也为堆遍历器的“分配” View 提供数据,以便您可以分析对象的分配位置。

And won't the recording miss the most important memory information since we're already past the threshold specified in the trigger?

堆转储会在触发触发器时捕获整个堆,因此您应该看到所有感兴趣的对象。

关于java - 如何使用触发器在 JProfiler 离线模式下进行分析时自动获取保留内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22665096/

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