测试随记

内存溢出&泄露

上一篇 / 下一篇  2020-07-11 16:33:32 / 个人分类:随记

内存溢出:out of memory 
指程序在申请内存时,没有足够的内存空间供其使用,出现内存泄露。比如申请一个integer但给他存了long才能存下的数,那就是内存溢出

内存泄露:memory leak
指程序在申请内存后,无法释放已申请的内存空间。一次内存泄露危害可以忽略,但内存泄露堆积后的结果很严重,无论多少内存,迟早会被占光。
即:不再会被使用的对象的内存不能被回收,就是内存泄露。

内存溢出产生的原因:

1.内存中加载的数据量过于庞大,如一次从数据库中取出过多的数据

2.集合类中有对对象的引用,使用完后未清空

3.代码中存在死循环或者循环产生过多重复的实体对象

4.创建大量无用对象

5.启动参数内存值设定的过小

6.各种连接对象(IO流对象。数据库连接对象、网络连接对象)未关闭

7.监听器的使用,释放对象时,没有删除相应的监听器

内存溢出的解决方案:

1.修改JVM启动参数,直接增加内存(-Xms -Xms参数一定不要忘记加),但也不是值越大越好

2.检查错误日志查看OutOfMemory错误前是否有其他异常或错误

3.对代码进行分别运行分析,找出可能发生溢出的位置

重点排查以下几点:

1.检查是否一次获取大量数据的查询,一般来说,一次获取十万条以上的记录到内存,就有可能产生内存溢出,对此建议查询尽量使用分析查询

2.检查代码是否有死循环或者递归调用

3.检查是否有大量循环重复产生新对象实体

4.检查List Map等集合对象是否使用完后未清除的问题,List Map等集合对象始终会对对象的引用,这样的对象便不会被GC回收


TAG:

 

评分:0

我来说两句

我的栏目

日历

« 2024-03-24  
     12
3456789
10111213141516
17181920212223
24252627282930
31      

我的存档

数据统计

  • 访问量: 2228
  • 日志数: 4
  • 建立时间: 2020-07-11
  • 更新时间: 2020-07-11

RSS订阅

Open Toolbar