Java VisualVM使用:堆OOM

背景
近期遇到了一个java.lang.OutOfMemoryError: Java heap space的问题,排除了堆设置过小的问题,代码走查没有头绪,所以使用VisualVM工具分析堆内存情况。之前有读过JVM相关的书籍,我知道此类问题可以使用这个工具定位和解决,但是是第一次遇到过这样的问题,所以要记录一次,每个第一次都是这么美妙。。

堆OOM的堆快照如下:
注:以下这是运行一段时间的快照
visualVM_oom

从上图中我们可以发现,随着时间的推移,堆内存是不断的递增的。然后我们分析一下内存情况:

从图中可以发现,PrepareStatment的实例数非常多,根据代码的上下文判断这是不应该的,很明显存在资源没有释放的情况。最后跟踪底层代码发现,每次调用查询操作都会实例一个PrepareStatment对象,用过之后都没有关闭掉,随着慢慢的积压,产生了堆OOM。

修正后的正常的快照如下:

原文地址:https://www.cnblogs.com/liushijie/p/4830819.html