1. 内存泄漏
程序无法释放已申请的内存空间
1.1 声明静态的集合类
如:private static Map<String> map = new HashMap();
它们的生命周期与应用程序的生命周期相同,容易导致OOM。
1.2 ThreadLocal未主动remove
ThreadLocal使用弱引用作为key,当ThreadLocal不存在外部强引用时,key会被GC回收,就导致key为null,value还存在强引用,只有在线程结束时,value的强引用才会断掉
1.3 Map集合使用对象作为key
Map集合使用对象作为key,对象如果没有重写hashCode和equals方法,此时修改了对象的属性,将导致Map中对应key找不到value
1.4 监听器
释放对象时未及时删除对应的监听器
1.5 各种连接
数据库连接、网络连接、IO连接未显式调用close方法
2. 内存溢出
程序无法申请到可用的内存空间
2.1 堆内存设置过小
-Xmx设置的值过小
2.2 创建大量大对象
程序因死循环创建大量大对象,将内存耗空
2.3 未查询分页
一次查询大量数据库数据到内存中