javascript 記憶體使用管理簡單介紹

antzone發表於2017-04-10

當然javascript記憶體管理是很複雜的,我們也不需要了解那麼多。

只要知道一些大體上的執行機制即可,下面就對此進行一下簡單介紹,需要的朋友可以做一下參考。

c語言類似的低階語言,有它們自己的低階記憶體管理基元,比如malloc()、free()等。但是像是javascript這樣的高階語言,記憶體管理就更為智慧,甚至讓我們感覺無需在意記憶體管理,只要集中精力於功能實現即可。

一.javascript宣告週期:

其實幾乎所有語言的生命週期都是大體如下:

(1).分配你所需要的記憶體。

(2).使用它(讀、寫)。

(3).當它不被使用時釋放 。

二.記憶體分配:

(1).變數初始化:

javascript在變數定義時分配記憶體。

[JavaScript] 純文字檢視 複製程式碼
// 給數值變數分配記憶體
var n = 5;
 
//給字元型 
var webName = "螞蟻部落";
   
//為物件及其包含變數分配記憶體
var obj = {
  age: 3,
  a: null
};
 
// 為陣列及其包含變數分配記憶體(就像物件)  
var arr = [2, null, "青島市南區"];
   
//為函式(可呼叫的物件)分配記憶體
function func(a) {
  return a + 2;
}
   
//函式表示式也能分配一個物件
ele.addEventListener('click', function () {
  ele.style.backgroundColor = 'blue';
}, false);

(2).通過函式呼叫實現記憶體分配:

[JavaScript] 純文字檢視 複製程式碼
var d = new Date();
var e = document.createElement('div'); 
//分配一個DOM元素

上面的程式碼呼叫函式建立一個物件,於是也就伴隨著記憶體的分配。

(3).值的試用:

使用值的過程實際上是分配記憶體進行讀取與寫入的操作,意味著可以寫入一個變數或者一個物件的屬性值,甚至傳遞函式的引數。

(4).記憶體釋放:

大多數記憶體管理的問題都在這個階段。在這裡最艱難的任務是找到“所分配的記憶體確實已經不再需要了”。它往往要求開發人員來確定在程式中哪一塊記憶體不再需要並且釋放它。高階語言直譯器嵌入了“垃圾回收器”,主要工作是跟蹤記憶體的分配和使用,以便當分配的記憶體不再使用時,自動釋放它。

三.垃圾回收方式:

關於瀏覽器垃圾回收的方式,這裡就不多介紹了,具體可以參閱以下兩篇文章:

(1).垃圾回收的標記清除演算法詳解一章節。

(2).垃圾回收的引用計數器法詳解一章節。

相關文章