通过jmap分析内存泄漏

jmap -histo:live pid

首先应该明确的是,jmap命令只能为内存泄漏提供一些线索和依据,但是不能确切的排查出代码中哪一行真正的出现了问题。

举个例子:一个池子有1000L的容量,前面的800L红色的水一直没有问题,这时向其中倒入了201L蓝色的水,池子里面的水溢出了,我能确切的说是这800L红色的水的问题导致的吗?我能确切的说是这201L蓝色的水导致的吗?只能说怀疑是800L的问题然后去看。

通过jmap能够帮我们排查问题提供一些依据,让我们对于排查问题更加的有迹可循

下面看下通过简单的Demo寻找问题的例子

通过上图,我在不同的时刻执行了jmap命令,可以看到instances是一直在不停的上升的,这样我们怀疑,会不会是com.nanjing.NanJing28Suo这个类创建了过多的实例,而没有被释放导致的内存溢出呢?这时候就需要到代码中寻找,哪里进行了实例化这个类。

通过jmap分析内存泄漏_第1张图片

通过idea的抖索功能等找到类实例化的地方,可以看到我这里就是在LIst中不停的添加NanJing28Suo这个实例,因为list中持有这些个NanJing28Suo的引用,而代码执行结束的时候也没有对该l

你可能感兴趣的:(JVM,Tuning)