国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

node.js|vue.js|jquery|angularjs|React|json|js教程|

香港云服务器
服務器之家 - 編程語言 - JavaScript - JavaScript的垃圾回收機制與內存管理

JavaScript的垃圾回收機制與內存管理

2021-08-09 16:56Lpyexplore JavaScript

這篇文章主要介紹了JavaScript的垃圾回收機制與內存管理,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

如果我們想要優化性能,首先我們必須得了解JavaScript中的垃圾回收機制,這樣可以將很多沒有被使用到的變量從內存中清除掉,騰出更多的內存空間,給別的變量分配內存空間。

JavaScript中的垃圾回收機制

引言

本篇文章將講解一下javascript的垃圾回收機制。同時,我們必須先具備作用域鏈的概念,不懂的小伙伴可以先花5分鐘觀看一下這篇文章,簡單了解一下作用域鏈的知識——從零開始講解JavaScript中作用域鏈的概念及用途

正文

一、垃圾回收機制

在JavaScript中,具有自動垃圾回收機制,也就是說執行環境會自動負責管理代碼執行過程中的內存使用情況,會自動清除一些沒有用的變量,以此來釋放內存。該機制每隔一段時間會執行一次。

例如下面這段代碼,函數 change 在執行時,聲明了一個局部變量my_color,然后等函數執行完畢以后,這個局部變量也沒有作用了,所以這時垃圾回收機制就會將這個沒用的的局部變量my_color給清除掉。

?
1
2
3
4
5
6
7
8
let color = 'red'
 
function change() {
    let my_color = 'blue'
    color = 'green'
}
 
change()

JavaScript中能實現這樣的垃圾回收的功能的一共有兩種方式: 標記清除 、引用計數

(1)標記清除

標記清除是JavaScript中最常用的垃圾回收方式。它的實現方式是這樣的,當代碼執行在一個環境中時,每聲明一個變量,就會對該變量做一個標記,例如標記一個進入執行環境;當代碼執行進入另一個環境中時,也就是說要離開上一個環境,這時對上一個環境中的變量做一個標記,例如標記一個離開執行環境,等到垃圾回收執行時,會根據標記來決定要清除哪些變量。

(2)引用計數

引用計數是一種不太常用的垃圾回收方式。顧名思義,就是針對值為引用類型數據的變量進行計數,那么我們先來看一下以下這個例子,來理解一下這個方式的實現方式

?
1
2
3
4
5
6
7
8
9
10
let color = [1, 2, 3]
 
function change() {
    let new_color = [4, 5, 6]
    color = new_color
}
 
change()
 
console.log(color) //返回 [4, 5, 6]

這個例子中的函數change內部聲明了一個變量new_color,并將一個引用類型值賦值給它,同時又將變量new_color賦值給了全局變量color,那么這種情況下,這個局部變量new_color就不會被當成垃圾回收了,因為此時的變量new_color并不是一個無用的局部變量了,它被全局變量color所引用了。

那么為什么變量new_color不會被當成垃圾回收呢?其實引用計數的垃圾回收方式是這樣的,當聲明一個變量時,會給該變量設定一個值為0的引用次數,當該變量被別的變量所引用,就將引用次數+1,若取消了原本的引用,則引用次數-1,而垃圾回收機制就是判斷一個變量的值的引用數是否為0,如果為0,就被當成無用變量給回收掉,如果不為0,則不對該變量做任何的處理。

二、管理內存

有時我們需要手動管理一下內存的分配和清除,應該很好理解,如果有更大的內存空間,因為可以給更多的變量分配內存,就會提高代碼運行的效率,增加線程中能夠執行的代碼語句的數量。

所以我們要確保占用更少的內存使得頁面獲得更好的性能,就可以只將需要用到的數據保存到變量中,一旦數據不再使用,我們可以通過給變量賦值null來釋放數據的引用,這種方法就叫做解除引用。這種方法大多數是用于全局變量,因為局部變量一般在離開環境以后就會被自動清除。

我們來改變一下上面這個例子,使得變量new_color被引用完后,當成無用變量給清除掉

?
1
2
3
4
5
6
7
8
9
10
11
12
let color = [1, 2, 3]
 
function change() {
    let new_color = [4, 5, 6]
    color = new_color
}
 
change()
 
console.log(color) //返回 [4, 5, 6]
 
color = null

在這個例子中,函數change內部聲明的變量new_color被全局變量color所引用,所以此時變量new_color的引用次數為1,我們為了讓變量new_color被清除,所以在代碼的最后一行,賦值一個null給全局變量color,手動解除了變量color對變量new_color的引用,此時變量new_color的引用次數-1,所以啊當前它的引用次數為0了。當垃圾回收機制執行的時候,發現它的引用次數為0,就把該變量當成無用變量給清除了,釋放了內存。

結束語

理解了js的垃圾回收機制,我們才能修改代碼對性能進行優化 。好了,JavaScript的垃圾回收機制的講解就講到這里,希望對大家有所幫助。

我是前端Lpyexplore,原創不易,喜歡我的文章的點個關注,甩個贊,不嫌麻煩的評論支持一下,謝謝大家啦~

到此這篇關于JavaScript的垃圾回收機制與內存管理的文章就介紹到這了,更多相關JavaScript的垃圾回收機制內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/l_ppp/article/details/106858295

延伸 · 閱讀

精彩推薦
595
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 成人午夜网 | 日韩一区在线视频 | 欧美日韩一区二区三 | 九九在线国产视频 | 色吧一区| 最近免费中文字幕在线视频2 | 久久久久无码国产精品一区 | 免费午夜视频 | 成人日日夜夜 | 国产精品三级久久久久久电影 | 特级西西人体444www高清大胆 | 中国黄色片在线观看 | 久久精品伊人 | 久草观看| 国产一区二区在线播放 | 黄色片免费在线 | 网站黄色在线观看免费 | 青青国产在线 | 日韩欧美国产精品 | 欧美九九九 | 久久精品亚洲精品国产欧美kt∨ | 精品久久久久久久 | 欧美日韩在线播放 | 亚洲 欧美 精品 | 国产精品国产精品国产专区不卡 | 黄色在线免费观看视频网站 | 日日夜夜精品国产 | 国产欧美综合一区二区三区 | 久久久久久久免费 | 国产一区二区av | 欧美一区二区在线播放 | 精品国产一区二区三区久久久蜜月 | 四房婷婷 | 国产一区二区三区在线 | 国产欧美日韩一区二区三区 | 成人在线一区二区 | 久久久久久亚洲av毛片大全 | 国产亚洲精品久久久久久 | 91污视频| 亚洲欧美福利视频 | 日韩欧美不卡 |