死磕JavaScript-垃圾收集機制
JavaScript和Java一樣具有自動垃圾收集機制。JavaScript的垃圾收集你機制的原理很簡單:找出那些不再繼續使用的變數,然後釋放其佔用的記憶體。
標記清除:這是最常用的垃圾收集方式。原理是:垃圾收集器在執行的時候會給儲存在記憶體中的所有變數都加上標記—>然後,它會去掉環境中的變數以及被環境中的變數引用的變數的標記—>在此之後再被加上標記的變數將被視為準備刪除的變數—>最後,垃圾收集器完成記憶體清除工作,銷燬那些帶標記的變數並回收它們所佔用的記憶體空間。
引用計數:這是一種不太常見的垃圾收集方式,IE用的就是這種。引用計數是指追蹤記錄每個值被引用的次數,原理是:當宣告一個變數並將一個引用型別值賦給該變數時,則這個值得引用次數初始化為1—>如果同一個值又被賦值給另一個變數,則該值的引用次數加1—>相反,如果包含對這個值引用的變數又取得了另外一個值,則這個值得引用次數減1—>當這個值得引用次數變為0時,說明無需再訪問這個變數,可以被垃圾回收機制回收。
但引用計數存在迴圈引用的風險,迴圈引用指的是物件A包含一個指向物件B的指標,而物件B中也包含一個指向物件A的引用。比如:
這裡例子中,objectA和objectB透過各自的屬性相互引用,也就是說,兩個物件的引用次數都是2,儘管函式執行完畢後,objectA和objectB還將繼續存在,因為它們的引用次數永遠都不為0。
IE因為採用了引用計數的垃圾收集而效能低下。
當然,我們也可以透過解除變數的引用(解除引用)來消除迴圈引用現象,比如:objectA = null;和objectB = null。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2768/viewspace-2807767/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- JavaScript的垃圾收集機制JavaScript
- 垃圾收集機制(Garbage Collection)批判 (轉)
- Java 虛擬機器垃圾收集機制詳解Java虛擬機
- JVM虛擬機器-垃圾回收機制與垃圾收集器概述JVM虛擬機
- 垃圾收集機制與記憶體分配策略記憶體
- 死磕JavaScript-鬆散型別、js變數儲存模型、變數提升JavaScript型別JS變數模型
- Java語言概述022_JVM與垃圾收集機制JavaJVM
- 強制Java垃圾收集的5種方法Java
- Netty原始碼死磕一(netty執行緒模型及EventLoop機制)Netty原始碼執行緒模型OOP
- 【死磕JVM】五年 整整五年了 該知道JVM載入機制了!JVM
- 深入理解JVM垃圾收集機制,下次面試你準備好了嗎JVM面試
- java垃圾回收機制Java
- js垃圾回收機制JS
- javascript 垃圾回收機制JavaScript
- JVM 垃圾回收機制JVM
- Java 垃圾回收機制Java
- JVM垃圾回收機制JVM
- 死磕阻塞佇列佇列
- 死磕 Elasticsearch 方法論Elasticsearch
- 死磕Java——ReentrantLockJavaReentrantLock
- 深入理解JVM記憶體回收機制(不包含垃圾收集器)JVM記憶體
- Dalvik虛擬機器垃圾收集機制簡要介紹和學習計劃虛擬機
- JavaScript垃圾收集JavaScript
- ART執行時垃圾收集機制簡要介紹和學習計劃
- java幾種垃圾收集方法和垃圾收集器Java
- 剖析垃圾回收機制(上)
- Python垃圾回收機制Python
- java垃圾回收機制整理Java
- JavaScript的垃圾回收機制JavaScript
- PHP的垃圾回收機制PHP
- jvm的垃圾回收機制JVM
- java JVM垃圾回收機制JavaJVM
- jvm垃圾回收機制 一JVM
- jvm垃圾回收機制 二JVM
- 理解 Java 垃圾回收機制Java
- Java的垃圾回收機制Java
- JS的垃圾回收機制JS
- 深挖Jvm垃圾收集JVM