内存溢出和内存泄漏的区别

一:内存溢出:程序在申请内存时,没有足够的内存空间供其使用,比如Interger申请到的内存空间,却要存long才能放下的数据

简单理解就是:我给你分配的地方就这么多,你超过了就溢出了

二:内存泄漏:指程序申请到内存空间后,无法释放已经申请的内存空间,积累多了,再多的内存都会被占进

 

三:内存泄漏并不会导致程序功能异常,但会导致Android程序内存占用过大,这将提高内存溢出发生的几率。

 

四:内存溢出的解决方案:

1:直接修改jvm启动参数,增加其内存

2:检查错误日志,看在OutOfMemory之前有什么异常或错误

3:对代码进行走查和分析,找出可能存在泄漏的点

 

重点排查以下几点:
1.检查对数据库查询中,是否有一次获得全部数据的查询。一般来说,如果一次取十万条记录到内存,就可能引起内存溢出。这个问题比较隐蔽,在上线前,数据库中数据较少,不容易出问题,上线后,数据库中数据多了,一次查询就有可能引起内存溢出。因此对于数据库查询尽量采用分页的方式查询。

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

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

4.检查对数据库查询中,是否有一次获得全部数据的查询。一般来说,如果一次取十万条记录到内存,就可能引起内存溢出。这个问题比较隐蔽,在上线前,数据库中数据较少,不容易出问题,上线后,数据库中数据多了,一次查询就有可能引起内存溢出。因此对于数据库查询尽量采用分页的方式查询。

5.检查List、MAP等集合对象是否有使用完后,未清除的问题。List、MAP等集合对象会始终存有对对象的引用,使得这些对象不能被GC回收。

第四步,使用内存查看工具动态查看内存使用情况


版权声明:本文为qq_33528407原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。