JVM内存溢出分析样例

  1. 首先设置虚拟机将启动参数:
-Xms128m -Xmx128m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=D:\

-Xms128m为最小堆内存
-Xmx128m为最大堆内存
-XX:+HeapDumpOnOutOfMemoryError为产生内存溢出时dump堆转储文件
-XX:HeapDumpPath为指定的堆转储文件保存路径
在这里插入图片描述
2. 启动项目,本案例使用导入大数据量的Excel文件测试,Excel文件约7万行,用poi读取,代码如下:
在这里插入图片描述
上传Excel之后,不出意外的发生了内存溢出:

(之所以不出意外的,是因为读取大数量的excel不能采用上面的方式)

  1. 从控制台的日志信息可以看出,已经生成了堆转储文件到指定的路径下,接下来我们将用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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值