内存泄漏导致内存溢出(OOM)

时间:2022-02-15 16:43:51

开发中遇到这样一个bug,调整之前做的一个意见反馈页面布局,输入框中限制字数200字,超过时自动删除不显示。页面截图:

内存泄漏导致内存溢出(OOM)

如图所示是自定义了一个可监听并限制输入字数的EditText,贴上代码

内存泄漏导致内存溢出(OOM)


内存泄漏导致内存溢出(OOM)


测试过程中发现如果一次性往输入框中粘贴几百上千个文字时程序就会闪退,报的错误是

内存泄漏导致内存溢出(OOM)

上网查了一下这个错误的意思是栈满溢出的错误。查看错误行的代码为第62行的delete方法,又重新测试了几次发现,如果输入字数达到限制字数200个之后一个一个字符输入或者一次粘贴比较少的字符是不会报异常的。最后确定了这个bug的原因:由于代码中调用delete方法时传入的变量值逻辑上不正确导致每次只删除一个字符,而一次性粘贴几百个甚至上千个字符过来的时候就要调用delete方法几百上千次,最终导致此异常发生。果断注掉,改为63行就好了。


考虑了一下觉得这个异常跟内存泄漏导致的内存溢出OOM特别的像,就一并记录一下。

内存泄漏是指你向系统申请分配内存进行使用,用完之后却没有释放,而导致这部分内存丢失,系统也不能把它在分配给其他需要的程序使用。

内存溢出是指程序申请的内存空间不够其使用而导致溢出。

一次的内存泄漏可能不会有太大的影响,对于用户来说也不会感觉的到也不会报异常。但是短时间内大量的内存泄漏堆积必然会导致内存溢出而报OOM异常。

ps:所以做开发的大家一定要注意平时的内存优化,毕竟你的作品就像你的孩子一样,老是无缘无故挂掉可不太好。

                                                                        内存泄漏导致内存溢出(OOM)