前言:
垃圾回收機制在工做中不多碰到,看到阮一峯的書中有寫,記錄下。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