gpt4 book ai didi

java - 如何用eclipse分析MAT

转载 作者:行者123 更新时间:2023-11-28 22:55:03 25 4
gpt4 key购买 nike

我的网络应用程序在 apache tomcat 中运行。

类加载器/组件 org.apache.catalina.loader.WebappClassLoader @ 0x7a199fae8占用 1,70,86,32,104 (88.08%) 字节。

内存在java.util.concurrent.ConcurrentHashMap$Segment[]的一个实例中累积由 <system class loader> 加载.

我在分析 Heapdump 时遇到了这个问题。如何进一步分析?

最佳答案

你提供的信息很少,所以我只能提供很少的建议……;-)

首先,您需要找出谁在使用最大的对象(在您的例子中是 HashMap)。尝试查看 HashMap 的内容,以便您了解它的用途。您还应该尝试查看引用此对象的位置。

你可以尝试限制它的大小。根据它是由您使用的框架还是由您自己的代码使用,这可能很容易(例如框架缓存的配置更改),中等(例如您需要重构自己的代码)或困难(例如它深深地埋在一个你无法控制的图书馆)。

罪魁祸首通常不是您所期望的:仅仅因为一个对象实例(在您的例子中是 HashMap)积累了大量内存并不意味着该对象的“所有者”是根问题的原因。您可能不得不在对象树中查看上方或下方的某些级别,甚至是完全不同的位置。在大多数情况下,非常了解您的应用程序至关重要。

更新:您可以尝试检查 HashMap 的内容,方法是右键单击它并选择 Java CollectionsHash Entries 。对于一般对象,您可以使用List objectswith incoming references(列出引用所选对象的所有对象)或with outgoing references(以列出所选对象引用的所有对象)。


内存分析不是一件容易的事,可能需要很多时间,至少如果你不习惯的话……

如果您需要进一步的帮助,您需要提供有关您的应用程序、您使用的框架以及堆在 MAT 中的外观的更多详细信息。

关于java - 如何用eclipse分析MAT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29590527/

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