前端内存泄露问题
内存泄露问题是各种应用程序都会存在和需要解决的,web页面一般不会像客户端那样长时间运行,很多内存泄露问题不容易被重视。
前端一般在可视化方向的页面需要长时间运行,内存泄露影响很大。
区别与c语言,很多像java,js等语言都有自动垃圾回收机制,有一定的内存管理,但是我们还是需要编程中注意避免内存泄露。
内存分配与回收
JavaScript 的内存模型,其主要也是由堆、栈、队列三方面组成:
其中队列指的是消息队列、栈就是函数执行栈。
而主要的用户创建的对象就存放在堆中,这也是我们内存分析与内存泄漏定位所需要关注的主要的区域。
JavaScript 中开发者并不需要手动地为对象申请内存,只需要声明变量,JavaScript Runtime 即可以自动地分配内存。
某个对象的内存生命周期分为了内存分配、内存使用与内存回收这三个步骤,当某个对象不再被需要时,它就应该被清除回收。
大部分的垃圾回收器是根据引用(Reference)来判断某个对象是否存活,所谓的引用即是某个对象是否依赖于其他对象,如果存在依赖关系即存在引用;譬如某个 JavaScript 对象引用了它的原型对象。
最简单的垃圾回收算法即是引用计数(Reference Counting),即清除所有零引用的对象。
不过这种算法往往受制于循环引用问题,即两个无用的对象相互引用。
const obj1 = {}
const obj2 = {}
obj1.val = obj2