淺談下垃圾回收機制(1)

前言:
垃圾回收機制在工做中不多碰到,看到阮一峯的書中有寫,記錄下。es6

垃圾回收機制與WeakSet
(1)垃圾回收機制只考慮對象的強引用
(2)垃圾回收機制依賴「引用計數」,當計數爲0,則GC自動回收該對象佔用的內存。
(3)當忘記取消引用(a=null),就會致使內存沒法釋放,從而引起內存泄漏。spa

WeakSet中的對象都是弱引用,即垃圾回收機制不考慮WeakSet對該對象的引用,也就是說,若是其餘對象都再也不引用該對象,那麼垃圾回收機制會自動回收該對象所佔用的內存,不考慮該對象還存在於WeakSet之中。code

這是由於垃圾回收機制依賴引用計數,若是一個值的引用次數不爲0,垃圾回收機制就不會釋放這塊內存。結束使用該值以後,有時會忘記取消引用,致使內存沒法釋放,進而可能會引起內存泄漏。WeakSet裏面的引用,都不計入垃圾回收機制,因此就不存在這個問題。所以,WeakSet適合臨時存放一組對象,以及存放跟對象綁定的信息。
只要這些對象在外部消失,它在WeakSet裏面的引用就會自動消失。對象

因爲上面這個特色,WeakSet的成員是不適合引用的,由於它會隨時消失。另外,因爲WeakSet內部有多少個成員,取決於垃圾回收機制有沒有運行,運行先後極可能成員個數是不同的,而垃圾回收機制什麼時候運行是不可預測的,所以ES6規定WeakSet不可遍歷。內存

參考:http://es6.ruanyifeng.com/#docs/set-maprem


(完)get

相關文章
相關標籤/搜索