jvisualvm内存泄漏排查

第一步

双击要查看的线程,选择监视,然后点击堆Dump按钮,就会生成一份内存快照信息。也可以直接导入服务器的dump文件
在这里插入图片描述
在这里插入图片描述

第二步

选择类那一列,右键点击要查看的类(可排序),点击在实例视图中显示,打开类实例视图
在这里插入图片描述

第三步

类实例视图页面可以查看类的属性信息、值和引用信息,最重要的是类的引用信息
在这里插入图片描述
在引用视图,右键this选择显示最近的垃圾回收根节点(我一般是直接一层层打开),可以看到Utts类被一个叫utsMap的hashMap引用,而这个utsMap又被Test类引用(即utsMap可能定义在Test类中),且这个utsMap是一个静态常量,是一个强引用(GC不会回收强引用)。

结论: 在Test类中存在一个静态的hashMap,代码中不断向这个map添加Utts类,由于静态常量属于强引用不会被GC回收,最终在不断往map添加Utts对象的结果就是导致内存一直被占用,即内存泄漏。

解决办法(针对集合): 最好不要定义成静态属性,在代码逻辑运行完后把大集合对象设为null
在这里插入图片描述
在这里插入图片描述

补充

也直接查看集合信息,可以看出集合被哪个类引用,集合里面元素类型,元素个数,然后集合里面的元素类型也有大量类实例的话,那百分之九十就能断定是这个集合导致内存泄漏或者溢出了。
List对应java.lang.object[]
HashMap java.util.HashMap&node
在这里插入图片描述

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值