什么是內(nèi)存管理
所謂內(nèi)存管理,是 js 從創(chuàng)建變量到垃圾回收的一個(gè)過程。
它的生命周期
- 分配你所需要的內(nèi)存(變量聲明的時(shí)候)
- 使用分配的內(nèi)存(讀,寫)
- 不需要的時(shí)候回收(或者釋放)內(nèi)存
js 的內(nèi)存空間
分三種:
棧:存放變量,包括基礎(chǔ)數(shù)據(jù)類型的變量及對(duì)象的指針
堆:存放引用數(shù)據(jù)類型的值
池:一般也歸類為棧,保存常量
垃圾回收的原理
找出那些不再繼續(xù)使用的變量脐瑰,然后釋放其占用的內(nèi)存。
瀏覽器的垃圾回收策略
- 標(biāo)記清除
- 引用計(jì)數(shù)算法
具體詳見下篇文章
什么是內(nèi)存泄漏廷臼?
不再用到的內(nèi)存苍在,沒有及時(shí)釋放,就叫做內(nèi)存泄漏(memory leak)
js 中哪些操作會(huì)引發(fā)內(nèi)存泄漏:
全局變量引起的內(nèi)存泄露(例如沒有使用 var, let, const 定義的變量)
解決方式: 在js文件開頭添加 ‘use strict'荠商,開啟嚴(yán)格模式目木。(或者一般將使用過后的全局變量設(shè)置為 null 或者將它重新賦值座硕。用完的定時(shí)器沒有清除
解決方式:當(dāng)不需要interval或者timeout的時(shí)候鞍爱,調(diào)用clearInterval或者clearTimeout閉包引起的內(nèi)存泄露:慎用閉包
dom清空或刪除時(shí)呻惕,事件未清除導(dǎo)致的內(nèi)存泄漏
循環(huán)引用帶來的內(nèi)存泄露(例如沒有結(jié)束條件的遞歸,循環(huán)引用的對(duì)象)