內存生命週期
不管什麼程序語言,內存生命週期基本是一致的:
1. 分配你所需要的內存
2. 使用分配到的內存(讀、寫)
3. 不需要時將其釋放\歸還
垃圾回收
- 引用計數垃圾收集
此算法把“對象是否不再需要”簡化定義爲“對象有沒有其他對象引用到它”。如果沒有引用指向該對象(零引用),對象將被垃圾回收機制回收。
限制:無法處理循環引用 - 標記-清除算法
這個算法假定設置一個叫做根(root)的對象(在Javascript裏,根是全局對象)。定期的,垃圾回收器將從根開始,找所有從根開始引用的對象,然後找這些對象引用的對象……從根開始,垃圾回收器將找到所有可以獲得的對象和所有不能獲得的對象。
從2012年起,所有現代瀏覽器都使用了標記-清除垃圾回收算法。
限制: 那些無法從根對象查詢到的對象都將被清除