首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Jvisualvm检测内存泄漏

使用Jvisualvm检测内存泄漏
EN

Stack Overflow用户
提问于 2012-12-12 23:25:21
回答 1查看 1.7K关注 0票数 2

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-13 18:09:59

除非您知道您正在创建大量的byte[]String实例,否则我不会将赌注押在byte[]char[]是问题的根源上。几乎我研究过的每个堆都有大量这样的东西,因为它们用在java内部的很多地方。我并不是说它们不能成为问题所在,但首先专注于您知道正在创建的不寻常数量的对象会更有成效,即使它们不是堆中最大的东西。

我个人发现MAT比VisualVM更适合分析工作,尽管VisualVM在动态监视内存使用和监视GC周期方面很棒。

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

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

如果您想更深入地了解这个问题,请阅读OQL,它可以用来查询MAT和VisualVM中的堆。

可在此处找到MAT: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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13842956

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档