测试随记
内存溢出&泄露
上一篇 /
下一篇 2020-07-11 16:33:32
/ 个人分类:随记
内存溢出:out of memory 指程序在申请内存时,没有足够的内存空间供其使用,出现内存泄露。比如申请一个integer但给他存了long才能存下的数,那就是内存溢出
内存泄露:memory leak
指程序在申请内存后,无法释放已申请的内存空间。一次内存泄露危害可以忽略,但内存泄露堆积后的结果很严重,无论多少内存,迟早会被占光。
即:不再会被使用的对象的内存不能被回收,就是内存泄露。
内存溢出产生的原因:
1.内存中加载的数据量过于庞大,如一次从数据库中取出过多的数据
2.集合类中有对对象的引用,使用完后未清空
3.代码中存在死循环或者循环产生过多重复的实体对象
5.启动参数内存值设定的过小
6.各种连接对象(IO流对象。数据库连接对象、网络连接对象)未关闭
7.监听器的使用,释放对象时,没有删除相应的监听器
内存溢出的解决方案:
1.修改JVM启动参数,直接增加内存(-Xms -Xms参数一定不要忘记加),但也不是值越大越好
2.检查错误日志查看OutOfMemory错误前是否有其他异常或错误
3.对代码进行分别运行分析,找出可能发生溢出的位置
重点排查以下几点:
1.检查是否一次获取大量数据的查询,一般来说,一次获取十万条以上的记录到内存,就有可能产生内存溢出,对此建议查询尽量使用分析查询
2.检查代码是否有死循环或者递归调用
3.检查是否有大量循环重复产生新对象实体
4.检查List Map等集合对象是否使用完后未清除的问题,List Map等集合对象始终会对对象的引用,这样的对象便不会被GC回收
收藏
举报
TAG: