MAT(MemoryAnalyzer)分析内存泄露实战

本文描述了一个线上应用定期内存溢出的问题,通过MAT分析和代码审查,发现是由于BouncyCastleProvider在用户登录时频繁创建且IdentityHashMap未回收导致。作者揭示了解决过程中的关键代码段和内存管理问题。
摘要由CSDN通过智能技术生成

线上有一个应用,每过一段时间内存就跑满,因为是非主要应用且周期较长,一直是采取的重启策略。近期有时间,就进行了一番分析。

使用MAT对dump文件进行分析

第一步就已经很清晰了

第二步,点击此处

基本上就可以定位是此处的问题,那么为什么会这样?哪里又用到了呐?

第三步,去代码里搜索这个对象

很巧合,就这么两个地方

打开发现是在用户登录的时候进行加解密的,每次都会new BouncyCastleProvider,有问题嘛?没问题,但是后面就有问题。

看下Cipher.getInstance的代码,里面有一句JceSecurity.getVerificationResult(var1)

这个方法就去每次去判断map里面有没有,没有的话put进去,关键就在这里,这个verificationResults是个IdentityHashMap,而且是static的,并不会回收。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值