处理Java堆内存溢出的简单思路
- 首先,在启动时加上参数
-XX:+HeapDumpOnOutOfMemoryError,这个参数表明在发生Heap OOM时,会转储(dump)此时的堆内存快照(.hprof文件)。 - 使用内存映像分析工具对内存快照文件进行分析,确认导致OOM的对象是否是必要的,也就是确认问题是内存泄露还是内存溢出。
- 如果对象是不必要的,也就是内存溢出,可进一步通过GC ROOT的引用链,找到泄露对象是通过怎样的路径与哪些GC ROOT相关联,进而找出这些对象创建的位置,定位内存泄露的代码位置及原因。
- 如果对象是必要的,也就是内存溢出,那就应当检查JVM的堆参数(-Xms,-Xmx)的设置,与机器的内存对比,看看是否还有调整的空间。再从代码上检查,是否存在某些对象的生命周期过长/持有状态时间过长、存储结构设计不合理的地方,加以优化。

浙公网安备 33010602011771号