Jprofile(二) - 查找内存泄露

1. 点击Telemetries -> Memory,可以看到内存使用情况图形


Jprofile(二) - 查找内存泄露_第1张图片


2. 执行应用程序某个步骤后,如果出现以下图形说明在每次GC之后内存没有完全被回收到初始状态,存在泄露


Jprofile(二) - 查找内存泄露_第2张图片


3. 随后点击Live Memory -> All Object -> MarkCurrent 保存当前对象以及内存使用状态,状态条由红色转变为绿色

Jprofile(二) - 查找内存泄露_第3张图片


4.再次运行上次执行的操作,就可以看到本次操作与上一步保存的状态之间的差异,也就是本次操作所创建出来的新的对象(红色部分)

Jprofile(二) - 查找内存泄露_第4张图片


5. 这些新创建的对象还暂时是存放在Eden区的,所以我们要通过执行GC来回收这些新创建的对象,使内存使用状态回到第三部保存的状态(也就是消除红色区域)

Jprofile(二) - 查找内存泄露_第5张图片


6. 点击Run GC之后可以看到,新创建的对象确实被回收了(红色区域消除)

    但是如果红色区域没有消失,那么说明程序存在内存泄露问题,需要跟踪查看对象是被谁长时间引用没有释放了

    右键还有红色区域的行 -> Show Selection In Heap Walker -> OK

Jprofile(二) - 查找内存泄露_第6张图片


7. 点击References -> Incomimg references(谁引用了它) 或者 Outgoing references (它引用了谁) -> 右键选中那个谁 -> Show Source 就可以查看引用它时候的源码了(提前是要先引入源码,见Jprofile 一

Jprofile(二) - 查找内存泄露_第7张图片


8. 也可以通过图的方式查看,选中Graph就可以了

Jprofile(二) - 查找内存泄露_第8张图片


你可能感兴趣的:(Jprofiler)