内存管理 内存泄漏
垃圾回收機制是周期性的,按照特定的周期循環,或者按照預先定義的時間執行 最流行的回收機制是mark-and-sweep 當一個變量進入當前上下文,那么會被標示為在上下文中,內存不會被釋放,當他離開會被標示為不在上下文,當垃圾回收機制運行的時候,它會首先記錄內存里的所有變量,然后將那些在上下文中和被在上下文中變量引用的變量去掉,然后剩下的變量會被銷毀,它們占用的內存也會被回收 As of 2008, Internet Explorer, Firefox, Opera, Chrome, and Safari all use mark-and-sweep garbage collection (or variations thereof) in their JavaScript implementations, though the timing of?garbage collection differs. 另一種回收機制為reference counting,這個方法的原理是每一個對象記著有對自己的引用總數,當垃圾回收運行的時候,會把引用數為0的值銷毀釋放內存。這個機制有個嚴重的問題,當對象相互引用時,會出現circular references,因此現在的瀏覽器都不在使用這種算法。但是在ie8及之前的瀏覽器里并不是所有的對象都是原生對象,Dom 和BOM 里的對象被稱之為COM (Component Object Model) 對象,使用C++實現。而Com里面是用reference counting作為垃圾回收機制的,因此還是會存在問題。例如: var element = document.getElementById(“some_element”); var myObject = new Object(); myObject.element = element; element.someObject = myObject; 解決方法 myObject.element = null; element.someObject = null; 在ie瀏覽器通過window.CollectGarbage()出發回收,opera通過window.opera.collect()
轉載于:https://www.cnblogs.com/chuangweili/p/5164102.html
總結
- 上一篇: 面试(软件实施工程师)
- 下一篇: Confluent Platform 3