如何弄清楚程序中消耗内存的是什么?

时间:2017-12-23 10:41:30

标签: java performance javafx

我正在研究一个似乎有内存泄漏的java项目。

它开始使用300mb的内存,这对我来说非常重要,但考虑到程序正在做什么以及它目前的优化水平,这并不奇怪。

但是,经过一段时间点击UI并滚动浏览具有2500个对象的表格上的每个项目后,内存使用率会慢慢攀升至926MB或更高,这似乎不合理。

enter image description here

该表有三列,大约2500行。该对象有大约20个成员,主要是基元,一些字符串和两个文件。

我使用jmap.exe -dump:format=b,file=output.bin 4088转储堆,然后将堆加载到 Eclipse Memory Analyzer 中。

堆文件本身是757mb,而内存使用量据报道为926mb,所以这有点令人惊讶。

我面临的一个大问题是,我要么不知道如何使用该工具,要么工具没有向我显示所有对象。

“概述”分析显示总大小为87.2MB ,比转储文件的大小和Windows报告的内存使用量小一个数量级:

enter image description here

“直方图”分析显示堆的总大小约为91MB

enter image description here

同样,“Dominator Tree”视图建议堆大约为90MB

enter image description here

所以我看到了一些可能性:

  1. 我不知道我在做什么< ==非常可能

  2. Windows正在报告错误的内存使用情况

  3. Eclipse Memory Analyzer没有从堆中给我全部图片 - 转储文件是757MB,但它只告诉我大约90MB。

  4. 正在消耗的内存不在堆上 - 但它还能在哪里呢?

  5. 完全是其他东西。

  6. 非常感谢任何有关如何追踪这种内存使用的帮助!

0 个答案:

没有答案