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

Javascript 垃圾收集機制介紹理解_基礎知識

May 16, 2016 pm 05:33 PM
垃圾 收集 機制

經常使用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

熱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

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

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1318
25
PHP教程
1269
29
C# 教程
1248
24
微軟 Windows 11/10 端 Edge 瀏覽器新增「手機上傳」功能,方便跨裝置檔案傳輸 微軟 Windows 11/10 端 Edge 瀏覽器新增「手機上傳」功能,方便跨裝置檔案傳輸 Feb 22, 2024 am 08:10 AM

微軟在最新的穩定版本中為Windows11/10端的Edge瀏覽器增添了一個新功能,即「手機上傳」。用戶現在可以透過Edge瀏覽器直接從手機上傳文件,而且該功能幾乎適用於所有網站,沒有文件格式的限制。這項功能的引入為用戶提供了更便捷的上傳方式,使得在使用Edge瀏覽器時可以更有效率地管理和分享文件。如何使用「手機上傳」功能:開啟Edge瀏覽器,點擊任何網站的「上傳」選項,然後在檔案選擇器中選擇「從行動裝置上傳」。使用手機相機掃描二維碼。在Edge瀏覽器點選「確認」配對設備。點選“上傳檔案”選項

星露穀物語硬木怎麼快速收集 星露穀物語硬木怎麼快速收集 Mar 26, 2024 am 11:21 AM

星露穀物語中硬木是一種重要的合成材料,我們在遊戲中能夠有著很多用途,所以在日常的時候可以囤一下,硬木具體有什麼途徑能夠獲得呢,下面就為大家帶來星露谷物語硬木取得途徑,有需要的話可以參考一下。星露穀物語硬木獲取途徑1、每天前去秘密森林採掘樹樁可以快速獲得硬木。 2.在秘密森林中採掘樹樁和打怪有機率獲得桃花心木種籽。 3.將種子種在院子中會長出桃花心木。 4.最後將桃花心木採掘後也可以快速獲得大量硬木。

手機安裝 CentOS 及手機安裝 CentOS 7 手機安裝 CentOS 及手機安裝 CentOS 7 Feb 29, 2024 pm 02:43 PM

前言作為熱衷於Linux的用戶,我們經常遇到在手機上安裝CentOS或CentOS7的需求。儘管手機並非最佳Linux運行平台,但有時我們需要在手機上進行一些Linux相關操作或開發工作。在這篇文章中,我們將詳細討論如何在手機上安裝CentOS或CentOS7。手機安裝CentOS要在手機上安裝CentOS,我們首先需要一個支援虛擬化技術的手機,例如支援安卓系統的手機,然後我們可以使用Termux這樣的終端模擬器應用來模擬Linux環境,在Termux中,我們可以使用套件管理器來安裝CentOS的

深入了解CSS佈局重新計算與渲染的機制 深入了解CSS佈局重新計算與渲染的機制 Jan 26, 2024 am 09:11 AM

CSS回流(reflow)和重繪(repaint)是網頁效能優化中非常重要的概念。在開發網頁時,了解這兩個概念的工作原理,可以幫助我們提高網頁的回應速度和使用者體驗。本文將深入探討CSS回流和重繪的機制,並提供具體的程式碼範例。一、CSS回流(reflow)是什麼?當DOM結構中的元素發生視覺性、尺寸或位置改變時,瀏覽器需要重新計算並套用CSS樣式,然後重新佈局

PHP中的自動載入機制 PHP中的自動載入機制 Jun 18, 2023 pm 01:11 PM

隨著PHP語言越來越受歡迎,開發人員需要使用越來越多的類別和函數。當專案規模擴大時,手動引入所有依賴項將變得不切實際。這時候就需要一種自動載入機制來簡化程式碼開發和維護過程。自動載入機制是一種PHP語言的特性,可以在運行時自動載入所需的類別和接口,並減少手動的類別文件引入。這樣,程式設計師可以專注於開發程式碼,減少因繁瑣的手動類別引入而產生的錯誤和時間浪費。在PHP中,一般

win10清理系統垃圾的步驟教學 win10清理系統垃圾的步驟教學 Jul 13, 2023 pm 09:53 PM

有些使用者在使用電腦的時候,出現了win10系統清理垃圾的情況,當遇到win10系統清理垃圾這種情況,我們該如何解決呢?如今還有很多用戶不知道如何處理win10系統清理垃圾的情況,那麼接下來就來看看win10清理系統垃圾的步驟教程,大家一起來看看吧。 1、在電腦桌面上,點選“此電腦”,管理。 2、選擇磁碟管理3、選擇你要清理的磁碟,並右鍵選擇屬性。 4、點擊頁面下方的“磁碟清理”按鈕5、在出現的介面中,選擇要清理的文件,點擊“確定”,點擊“刪除文件”即可。以上就是win10清理系統垃圾的步驟教學啦,希望

如何在uniapp中實現問卷調查和回饋收集 如何在uniapp中實現問卷調查和回饋收集 Oct 20, 2023 pm 03:06 PM

如何在uni-app中實現問卷調查和回饋收集作為全面跨平台的開發框架,uni-app在行動應用開發中越來越受歡迎。對於一些需要進行問卷調查和回饋收集的場景,uni-app也提供了豐富的解決方案。本文將介紹如何在uni-app中實現問卷調查和回饋收集,並提供具體的程式碼範例。一、概述問卷調查是收集使用者意見和回饋的常見方法,而在uni-app中實現問卷調查

Go語言垃圾回收機制詳解 Go語言垃圾回收機制詳解 Mar 26, 2024 pm 02:42 PM

Go語言(也稱為Golang)是Google開發的一種高效的程式語言,具有並發性和垃圾回收機制等特點。本文將詳細解釋Go語言中的垃圾回收機制,包括其原理、實作方式以及程式碼範例。 1.垃圾回收原理Go語言的垃圾回收機制是透過「標記-清除」演算法實現的。在程式運行過程中,Go運行時會在堆中追蹤哪些物件是可以被存取的(被標記),而哪些物件是無法被存取的,也就是垃圾資料(需要清除

See all articles