什么是内存泄漏?什么原因会导致呢?

简介: 什么是内存泄漏?什么原因会导致呢?


内存泄露的解释:程序中己动态分配的堆内存由于某种原因未释放或无法释放。

  • 根据JS的垃圾回收机制,当内存中引用的次数为0的时候内存才会被回收
  • 全局执行上下文中的对象被标记为不再使用才会被释放

内存泄露的几种场景

  • 全局变量过多。通常是变量未被定义或者胡乱引用了全局变量
// main.js
// 场景1
function a(){
    b=10;
}
a();
b++;
// 场景2
setTimeout(()=>{
    console.log(b)
},1000)


  • 闭包。 未手动解决必包遗留的内存引用。定义了闭包就要消除闭包带来的副作用
function closuer (){
    const b = 0;
    return (c)=> b + c
}
const render = closuer();
render();
render = null; // 手动设置为null,GC会自己去清除
  • 事件监听未被移除
function addEvent (){
 const node =  document.getElementById('warp');
    node.addEventListener('touchmove',()=>{
        console.log('In Move');
    })
}
const onTouchEnd = (){
   const node =  document.getElementById('warp');
   node.
}
useEffect(()=>()=>{
     const node =  document.getElementById('warp');
     node.removeEventListener('touchmove');
}) // 类似react 生命周期函数: componentWillUnmount
render(<div id='warp' onTouchEnd={onTouchEnd}>
 // code...
</div>)
  • 缓存。建议所有缓存都设置好过期时间


相关文章
|
2月前
|
监控 NoSQL Java
遇到内存泄漏
遇到内存泄漏
28 0
|
4月前
|
存储 C++
什么是内存泄漏?如何避免内存泄漏?
什么是内存泄漏?如何避免内存泄漏?
26 0
|
10月前
|
C语言
内存泄露和内存溢出
内存泄露和内存溢出
159 0
AcDbRegion::createFromCurves 引起的内存泄露
AcDbRegion::createFromCurves 引起的内存泄露
有趣的"内存泄漏"
有趣的"内存泄漏"
|
9月前
|
IDE Java 开发工具
什么是内存溢出,什么是内存泄漏?
什么是内存溢出,什么是内存泄漏?这是很多小伙伴经常问我的一个问题,今天花3分钟时间给大家介绍一下。先来介绍什么是内存溢出?
120 0
|
监控 算法 Java
内存泄露与内存溢出
内存泄露与内存溢出
138 1
|
缓存 数据库 Android开发
内存泄漏那些事
内存泄漏那些事
108 0
内存泄漏那些事
|
存储 缓存 Java
小心内存泄漏
7 消除过期的对象引用 这一条建议主要讲的是要规避内存泄漏。因为像Java这种具有垃圾回收机制的语言,内存泄漏一般都是比较隐蔽的。
小心内存泄漏