base - 如何排查并解决java堆OutOfMemoryError异常?

119 阅读1分钟

世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。

1.通过内存映像分析工具对dump出来的堆转储快照进行分析。
2.首先判断是内存泄漏还是内存溢出(即,导致OOM的对象是否有必要存在)
3.如果是内存泄漏,可以进一步查看泄漏对象到GC Roots的引用链,找出内存泄漏代码的具体位置。
4.如果是内存溢出,检查堆参数(-Xms,-Xmx)的设置,看能否扩容。
5.检查是否有对象生命周期过长或是存储结构不合理等现象,尽量减少内存消耗。