javascript 之 內存管理

一 內存生命週期

1.JavaScript 的內存分配

值的初始化,JavaScript 在定義變量時就完成了內存分配。

2.使用值

使用值的過程實際上是對分配內存進行讀取與寫入的操作。讀取與寫入可能是寫入一個變量或者一個對象的屬性值,甚至傳遞函數的參數。

3.當內存不再需要使用時釋放

大多數內存管理的問題都在這個階段。在這裏最艱難的任務是找到“所分配的內存確實已經不再需要了”。它往往要求開發人員來確定在程序中哪一塊內存不再需要並且釋放它。

 

二 垃圾回收

1.引用計數

此算法把“對象是否不再需要”簡化定義爲“對象有沒有其他對象引用到它”。如果沒有引用指向該對象(零引用),對象將被垃圾回收機制回收。

限制:循環引用

2.標記清除

這個算法把“對象是否不再需要”簡化定義爲“對象是否可以獲得”。

這個算法假定設置一個叫做根(root)的對象(在Javascript裏,根是全局對象)。垃圾回收器將定期從根開始,找所有從根開始引用的對象,然後找這些對象引用的對象……從根開始,垃圾回收器將找到所有可以獲得的對象和收集所有不能獲得的對象。

  • 優點:循環引用不再是問題了

  • 缺點:那些無法從根對象查詢到的對象都將被清除

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章