由于疏忽或错误造成程序未能释放不在使用的内存,如果不及时释放,会造成内存占比越来越高,对项目中的内存会造成很大的影响
二.常见的几种情况 1.意外的全局变量如下代码:a没有定义类型,会默认全局变量,按理说执行完函数就应该对a进行销毁,但是以外的全局变量不会销毁
简单理解:无用的内存还在占用,得不到释放和归还,比较严重的时候,无用的内存还会增加,从而导致整个系统卡顿,甚至崩溃
function fun(){
a=10
console.log(a);
}
fun()
console.log(a);
还有一种情况用this 创建,此时this 指向window 也会造成意外全局变量
function fun(){
this.a=10
console.log(a);
}
fun()
console.log(a);
2.定时器
如下代码:两秒钟后输出这句话,导致定时器的回调函数及其内部依赖的变量都不能被回收,这样也会造成内存泄漏
var hellow='你是一个优秀的前端工程师'
setTimeout(()=>{
console.log(hellow);
},2000)
解决办法:当不需要interval或者timeout的时候,调用clearInterval或者clearTimeout
var hellow='你是一个优秀的前端工程师'
const time= setTimeout(()=>{
console.log(hellow);
clearTimeout(time)
},2000)
3.闭包
闭包可以维持函数内局部变量,使其得不到释放。
function fun(name){
function fun1(){
console.log(name);
}
return fun1
}
var fn=fun('张三')
fn()
fn()
fn=null //进行释放
4.console
控制台日志记录对总体内存内置文件的影响,也是个重大的问题,同时也是容易被忽略的。记录错误的对象,可以将大量的数据保留在内存中。传递给console.log的对象是不能被垃圾回收,所以没有去掉console.log可能会存在内存泄漏~~~~
总结:
怎样避免内存泄露
1)减少不必要的全局变量,或者生命周期较长的对象,及时对无用的数据进行垃圾回收;
2)注意程序逻辑,避免“死循环”之类的 ;
3)避免创建过多的对象 原则:不用了的东西要及时归还。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)