gpt4 book ai didi

java - 使用 Jvisualvm 检测内存泄漏

转载 作者:行者123 更新时间:2023-11-30 11:37:56 26 4
gpt4 key购买 nike

我的 java jar 只是大型程序使用的众多 jar 之一。我试图确定我的代码是否是内存泄漏的原因,或者我的代码之外是否存在其他问题。我正在使用 jvisualvm,并且已经确定了我所有的类,而且没有一个看起来可疑。查看采样器,我可以看到 byte[]、char[] 和 int[] 在大小和创建的实例方面似乎是最大的用户。问题是,我无法确定他们属于谁。我知道我的程序中有各种 byte[],但由于有大约 32,000 个实例,很难逐一查看它们的来源。有没有办法过滤数据,以便只能查看来自某个 jar 或区域的项目?谢谢。

最佳答案

除非您知道您正在创建大量 byte[]String 实例,否则我不会在 byte[] 上投入资金或 char[] 是问题的根源。几乎我挖掘过的每个堆都有大量这些,因为它们在 java 的许多内部结构中使用。我并不是说它们不可能是问题,但首先专注于您知道正在创建的异常数量的对象会更有成效,即使它们不是堆中最大的东西。

我个人发现 MAT 比 VisualVM 更适合分析工作,尽管 VisualVM 非常适合动态监控内存使用情况和观察 GC 周期。

MAT 还允许您向下钻取以查看对保留对象的传入和传出引用。这将使您更好地了解哪些对象占用了比您预期更多的内存,并且应该可以帮助您找出 JAR 中的某个对象是否是罪魁祸首。

MAT 附带的帮助文档非常好,绝对值得一读以帮助您入门。

如果您想更深入地了解 OQL,您可以使用它来查询 MAT 和 VisualVM 中的堆。

垫子可以在这里找到:http://www.eclipse.org/mat/


我翻出了一些背景资料(其中一些有点过时,但仍然与更好地描绘如何解决问题有关)

Leaks are easy to find, but memory usage analysis is bit more difficult
Memory leaks are easy to find
Finding memory leaks with SAP memory analyser

在查看堆时,了解一下 GC 也很值得,因此值得一试:
GC Tuning
Diagnosing a Garbage Collection problem

关于java - 使用 Jvisualvm 检测内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13842956/

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