1、内存溢出(OOM)的原因
在JVM中,内存区间包括(堆、永久区、线程栈、直接内存)
1.1 堆溢出

1.2 永久区

1.3 栈溢出

1.4 直接内存溢出

遇到内存溢出后,应该如何思考和处理问题?
2、MAT使用基础

2.1 支配树

2.2 浅堆(Shallow Heap)与深堆(Retained Heap)

2.3 显示入引用(incoming)和出引用(outgoing)

3、使用Visual VM分析堆
java自带的多功能分析工具,可以用来分析堆Dump

4、Tomcat OOM分析案例

解决方法:
1、OOM由于保存session过多引起,可以考虑增加堆大小
2、如果应用允许,缩短session的过期时间,使得session可以及时过期,并回收
本文详细探讨了Java中的内存溢出问题,包括堆溢出、永久区溢出、线程栈溢出和直接内存溢出。针对这些问题,提出了分析思路,如使用MAT工具进行内存分析,关注支配树、浅堆和深堆等关键指标。同时,建议通过增加堆大小、缩短session过期时间等方式来解决。此外,还介绍了使用VisualVM工具进行堆分析的方法,并给出了Tomcat OOM的实际案例分析。
945

被折叠的 条评论
为什么被折叠?



