搜尋
首頁web前端js教程Javascript 垃圾收集機制介紹理解_基礎知識

經常使用Javascript 的人會琢磨其垃圾收集機制,Javascript 並不像C,C 那樣需要開發者手動去清除垃圾,在編寫Javascript 程式是,開發者無需關心記憶體使用問題,所需記憶體分配以及無用記憶體(垃圾)的回收完全實現了自動管理。究其根源,主要是程式收集那些不再使用的變量,並且釋放其佔用的記憶體。因此,垃圾收集機制會依照固定時間間隔,週期性重複的執行此操作。


舉例來說,局部變數只存在於函數內部,程式會為局部變數在堆疊記憶體或堆疊記憶體中分配對應的儲存空間,當函數運行結束,局部變數所佔用的記憶體就沒有存在的必要了,這時程式會釋放局部變數所佔用的記憶體供其他變數使用。這是程式最簡單釋放記憶體的方法,但是很多時候,程式中變數會一直被使用,此時垃圾收集機制必須追蹤變數並且判斷其是否被使用,是否可以釋放其記憶體空間。

垃圾收集機制主要判斷變數釋放記憶體空間的方法有兩個:其一是標記清除法,其二是引用計數法。

標記法,每個變數都有其運行環境,變數創建後會在某種環境中運行,例如創建一個局部變量,局部變數會運行在函數體內。當函數運行時,會標記局部變數為“進入環境”,當函數體運行結束後,表示變數脫離了其運行環境,此時則將變數標記為“離開環境”。對於「離開環境」的變量,垃圾收集機制會進行相應記錄,並在下一個回收週期時將其釋放。

引用計數法,追蹤記錄每個值的被引用次數。宣告一個變數並將一個引用型別值賦給該變數時,這個值得被引用次數就是 1。如果同一個值又被賦給另一個變量,則該值的引用次數加 1。相反,如果包含這個值的引用的變數又取得另一個值,這個值得引用次數減 1。當這個值得引用次數為 0 時,則表示沒有辦法再存取此值,因此就可以將其佔用的記憶體空間回收。當垃圾收集器在下一個週期運作時,會釋放引用次數為零的值所佔用的記憶體空間。 (原文解釋參考:Javascript 高階程式設計- 第二版)

舉例來說:

複製程式碼



複製程式碼



複製程式碼


程式碼如下:

此函數運轉退出後,object1 的計數器讀數為1,object2 的計數器度數為1。所以兩個變數都不會被銷毀。如果大量的這樣的程式存在於函數體內,就會導致大量的記憶體被浪費而無法回收,從而導致記憶體的洩漏。

上述問題解決方法,手動釋放 object1 object2 所佔用的記憶體。即:



複製碼對比上面的例子,舉一個正常情況下的例子。 複製程式碼 程式碼如下:

            function countMethod(){
                            var object2 = new Object(); // 宣告變量,計數器由0 變成1
                  object1.method1 = "This is object1";  //       object2.method2 = "This is object2";  // object2 計數器-1, object2 讀數變為0
            }


透過上例看出,正常情況下,當函數運轉結束後,object1 object2的垃圾讀數皆為0015週期,在下一個讀數時會收集垃圾週期被回收並且釋放其所佔用的記憶體。
陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
JavaScript評論:使用//和 / * * / * / * /JavaScript評論:使用//和 / * * / * / * /May 13, 2025 pm 03:49 PM

JavaScriptusestwotypesofcomments:single-line(//)andmulti-line(//).1)Use//forquicknotesorsingle-lineexplanations.2)Use//forlongerexplanationsorcommentingoutblocksofcode.Commentsshouldexplainthe'why',notthe'what',andbeplacedabovetherelevantcodeforclari

Python vs. JavaScript:開發人員的比較分析Python vs. JavaScript:開發人員的比較分析May 09, 2025 am 12:22 AM

Python和JavaScript的主要區別在於類型系統和應用場景。 1.Python使用動態類型,適合科學計算和數據分析。 2.JavaScript採用弱類型,廣泛用於前端和全棧開發。兩者在異步編程和性能優化上各有優勢,選擇時應根據項目需求決定。

Python vs. JavaScript:選擇合適的工具Python vs. JavaScript:選擇合適的工具May 08, 2025 am 12:10 AM

選擇Python還是JavaScript取決於項目類型:1)數據科學和自動化任務選擇Python;2)前端和全棧開發選擇JavaScript。 Python因其在數據處理和自動化方面的強大庫而備受青睞,而JavaScript則因其在網頁交互和全棧開發中的優勢而不可或缺。

Python和JavaScript:了解每個的優勢Python和JavaScript:了解每個的優勢May 06, 2025 am 12:15 AM

Python和JavaScript各有優勢,選擇取決於項目需求和個人偏好。 1.Python易學,語法簡潔,適用於數據科學和後端開發,但執行速度較慢。 2.JavaScript在前端開發中無處不在,異步編程能力強,Node.js使其適用於全棧開發,但語法可能複雜且易出錯。

JavaScript的核心:它是在C還是C上構建的?JavaScript的核心:它是在C還是C上構建的?May 05, 2025 am 12:07 AM

javascriptisnotbuiltoncorc; sanInterpretedlanguagethatrunsonenginesoftenwritteninc.1)JavascriptwasdesignedAsignedAsalightWeight,drackendedlanguageforwebbrowsers.2)Enginesevolvedfromsimpleterterpretpretpretpretpreterterpretpretpretpretpretpretpretpretpretcompilerers,典型地,替代品。

JavaScript應用程序:從前端到後端JavaScript應用程序:從前端到後端May 04, 2025 am 12:12 AM

JavaScript可用於前端和後端開發。前端通過DOM操作增強用戶體驗,後端通過Node.js處理服務器任務。 1.前端示例:改變網頁文本內容。 2.後端示例:創建Node.js服務器。

Python vs. JavaScript:您應該學到哪種語言?Python vs. JavaScript:您應該學到哪種語言?May 03, 2025 am 12:10 AM

選擇Python還是JavaScript應基於職業發展、學習曲線和生態系統:1)職業發展:Python適合數據科學和後端開發,JavaScript適合前端和全棧開發。 2)學習曲線:Python語法簡潔,適合初學者;JavaScript語法靈活。 3)生態系統:Python有豐富的科學計算庫,JavaScript有強大的前端框架。

JavaScript框架:為現代網絡開發提供動力JavaScript框架:為現代網絡開發提供動力May 02, 2025 am 12:04 AM

JavaScript框架的強大之處在於簡化開發、提升用戶體驗和應用性能。選擇框架時應考慮:1.項目規模和復雜度,2.團隊經驗,3.生態系統和社區支持。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用