前端進階(第一期)-呼叫堆疊筆記
var a = 20; var b = 'abc'; var c = true; var d = { m: 20 } 複製程式碼

值型別資料和引用資料型別的複製
- 值型別資料是值的複製,開闢新的儲存空間來儲存值,複製前後的資料之間無聯絡。
- 引用型別資料僅僅是地址的複製,開闢新的儲存空間來儲存地址指標,複製前後的地址指標指向堆中同一個值。
記憶體空間管理
在JavaScript中,最常用的是通過 標記清除 的演算法來找到哪些物件是不再繼續使用的, a=null 是一個釋放引用的操作,脫離執行環境,這個值會在下一次垃圾收集器執行操作時被找到並釋放。
1-4 JavaScript深入之帶你走進記憶體機制
ofollow,noindex">原文地址
JavaScript的記憶體管理機制是:記憶體基元在變數(物件,字串等等)建立時分配,然後在他們不再被使用時“自動”釋放。後者被稱為垃圾回收。
知識點有:
- 記憶體模型
- 記憶體的生命週期
- 記憶體回收演算法
- 記憶體洩漏
記憶體模型
JS記憶體空間分為 棧(stack) 、 堆(heap) 、 池(一般也會歸類為棧中) 。 其中棧存放變數,堆存放複雜物件,池存放常量。
記憶體的生命週期
記憶體分配 --- 記憶體使用 --- 記憶體回收
記憶體回收演算法
- 引用計數演算法
存在一個致命的問題:迴圈引用。如果兩個物件相互引用,儘管他們已不再使用,垃圾回收器不會進行回收,導致記憶體洩露。
- 標記清除演算法
標記清除演算法將“不再使用的物件”定義為“無法達到的物件”。從根部(在JS中就是全域性物件)出發定時掃描記憶體中的物件,凡是能從根部到達的物件,都是還需要使用的。那些無法由根部出發觸及到的物件被標記為不再使用,稍後進行回收。