基于昨天遇到的内存溢出的问题,今天我决定好好的了解一下内存溢出这个问题,然后我又打开了百度------什么是内存泄漏......
打开了很多,看了半天云里雾里,这跟我昨天遇到的情况咋都不一样呢,翻了半天之后看到一片知乎---内存泄漏和内存溢出有啥区别?我才发现原来我记错了,昨天那个问题是内存溢出hhhh,于是好奇心驱使我去了解一下这俩到底是啥以及有啥不一样。
先说结论:
内存溢出直白点说就是某些原因导致内存不足
而内存泄漏是不再用到的内存,没有及时释放
然后百度百科说:
内存泄漏(Memory Leak)是指程序中已动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果,具有隐蔽性、积累性的特征。
常见于:
1. 意外的全局变量:比如函数里的变量使用未声明(自动识别为全局变量),或者是this直接创建了变量(this.sss)
2.被遗忘的计时器或回调函数 ,因此一旦它们不再需要(或者关联的对象变成不可达),一定要移除掉
3.不规范使用闭包
避免策略:
1.减少不必要的全局变量,或者生命周期较长的对象,及时对无用的数据进行垃圾回收(即赋值为null);
2.注意程序逻辑,避免“死循环”之类的 ;
3.避免创建过多的对象 原则:不用了的东西要记得及时归还。
4.减少层级过多的引用
内存溢出(Out Of Memory,简称OOM)是指应用系统中存在无法回收的内存或使用的内存过多,最终使得程序运行要用到的内存大于能提供的最大内存。此时程序就运行不了,系统会提示内存溢出,有时候会自动关闭软件,重启电脑或者软件后释放掉一部分内存又可以正常运行该软件,而由系统配置、数据流、用户代码等原因而导致的内存溢出错误,即使用户重新执行任务依然无法避免.
要不就增加内存,要不就清理缓存~