- 首先设置虚拟机将启动参数:
-Xms128m -Xmx128m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=D:\
-Xms128m为最小堆内存
-Xmx128m为最大堆内存
-XX:+HeapDumpOnOutOfMemoryError为产生内存溢出时dump堆转储文件
-XX:HeapDumpPath为指定的堆转储文件保存路径

2. 启动项目,本案例使用导入大数据量的Excel文件测试,Excel文件约7万行,用poi读取,代码如下:

上传Excel之后,不出意外的发生了内存溢出:

(之所以不出意外的,是因为读取大数量的excel不能采用上面的方式)
- 从控制台的日志信息可以看出,已经生成了堆转储文件到指定的路径下,接下来我们将用Eclipse Memory Analyzer打开这个文件:

这个页面,我们可以按Esc关闭,进入Overview界面:

饼图很直观的展示了内存中最大的几个对象
Actions和Reports中常用的功能介绍:
(1) Histogram可以列出内存中的对象,对象的个数以及大小。
(2)Dominator Tree可以列出那个线程,以及线程下面的那些对象占用的空间。
(3)Top consumers通过图形列出最大的object。
(4)Leak Suspects通过MA自动分析泄漏的原因。
我们使用第4个来看下内存占用最多对象所在的代码:
点击Leak Suspects查看:

单击See stacktrace:

我们可以看到内存占用较多导致内存泄露的代码位置。
更多介绍,可以参照:
https://blog.youkuaiyun.com/cc907566076/article/details/79108782
86万+

被折叠的 条评论
为什么被折叠?



