最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JS堆棧內(nèi)存的運行機制詳解

 更新時間:2022年06月18日 09:03:13   作者:Gaby  
棧內(nèi)存主要用于存儲各種基本類型的變量,包括Boolean、Number、String、Undefined、Null,以及對象變量的指針(地址值),這篇文章主要介紹了JS堆棧內(nèi)存的運行機制,需要的朋友可以參考下

在js引擎中對變量的存儲主要有兩個位置,堆內(nèi)存和棧內(nèi)存。棧內(nèi)存主要用于存儲各種基本類型的變量,包括Boolean、Number、String、Undefined、Null,以及對象變量的指針(地址值)。棧內(nèi)存中的變量一般都是已知大小或者有范圍上限的,算作一種簡單存儲。而堆內(nèi)存主要負(fù)責(zé)像對象Object這種變量類型的存儲,對于大小這方面,一般都是未知的。

棧內(nèi)存 ECStack

棧內(nèi)存ECStack(Execution Context Stack)(作用域)

JS之所以能夠在瀏覽器中運行,是因為瀏覽器給JS提供了執(zhí)行的環(huán)境棧內(nèi)存

瀏覽器會在計算機內(nèi)存中分配一塊內(nèi)存,專門用來供代碼執(zhí)行=》棧內(nèi)存ECStack(Execution Context Stack)執(zhí)行環(huán)境棧,每打開一個網(wǎng)頁都會生成一個全新的ECS

ECS的作用

  • 提供一個供JS代碼自上而下執(zhí)行的環(huán)境(代碼都在棧中執(zhí)行)
  • 由于基本數(shù)據(jù)類型值比較簡單,他們都是直接在棧內(nèi)存中開辟一個位置,把值直接存儲進去的,當(dāng)棧內(nèi)存被銷毀,存儲的那些基本值也都跟著銷毀

堆內(nèi)存

堆內(nèi)存:引用值對應(yīng)的空間,堆內(nèi)存是區(qū)別于棧區(qū)、全局?jǐn)?shù)據(jù)區(qū)和代碼區(qū)的另一個內(nèi)存區(qū)域。堆允許程序在運行時動態(tài)地申請某個大小的內(nèi)存空間。

存儲引用類型值(對象:鍵值對, 函數(shù):代碼字符串),當(dāng)內(nèi)存釋放銷毀,那么這個引用值徹底沒了 堆內(nèi)存釋放

當(dāng)堆內(nèi)存沒有被任何得變量或者其他東西所占用,瀏覽器會在空閑的時候,自主進行內(nèi)存回收,把所有不被占用得內(nèi)存銷毀掉

谷歌瀏覽器(webkit),每隔一定時間查找對象有沒有被占用 引用計數(shù)器:當(dāng)對象引用為0時釋放它

全局對象 GO 全局對象GO(Global Object)瀏覽器端會讓W(xué)INDOW指向GO

瀏覽器把內(nèi)置得一些屬性方法收到一個單獨得內(nèi)存中堆內(nèi)存(Heap)任何開辟得內(nèi)存都有一個16進制得內(nèi)存地址,方便后期找到這個內(nèi)存

執(zhí)行上下文 EC EC(Execution Context)執(zhí)行上下文:代碼自己執(zhí)行所在的環(huán)境

全局的執(zhí)行上下文EC(G) 函數(shù)中的代碼都會在一個單獨的私有的執(zhí)行上下文中處理 塊級的執(zhí)行上下文 形成的全局執(zhí)行上下文,進入到棧內(nèi)存中執(zhí)行“進棧” 執(zhí)行完代碼,可能會把形成的上下文出棧釋放“出棧”

變量對象 VO VO(Varibate Object)變量對象:在當(dāng)前上下文中,用來存放創(chuàng)建的變量和值的地方(每一個執(zhí)行上下文中都有一個自己的變量對象,函數(shù)私有上下文中叫做AO(Activation Object)活動對象,但也是變量對象)

VO(G)全局變量對象:全局上下文中用來存儲全局變量的空間,它不是GO,只不過某些情況下VO(G)中的東西會和GO中的東西有所關(guān)聯(lián)而已“映射機制”

堆棧內(nèi)存釋放 JS中的內(nèi)存分為堆棧內(nèi)存和棧內(nèi)存

堆內(nèi)存:存儲引用數(shù)據(jù)類型值(對象:鍵值對, 函數(shù):代碼字符串) 棧內(nèi)存: 提供JS代碼執(zhí)行的環(huán)境和存儲基本類型值

堆內(nèi)存釋放: 讓所有引用堆內(nèi)存空間地址的變量賦值為null即可,沒有變量占用這個堆內(nèi)存了瀏覽器會在空閑的時候把他釋放掉

棧內(nèi)存釋放: 一般情況下,當(dāng)函數(shù)執(zhí)行完成,所形成的私有作用域(棧內(nèi)存)都會自動釋放掉,在棧內(nèi)存中存儲的基本值也都會釋放掉,但也有特殊不銷毀的情況:

函數(shù)執(zhí)行完成,當(dāng)前形成的棧內(nèi)存中,某些內(nèi)容被棧內(nèi)存以外的變量占用了,此時棧內(nèi)存不能釋放,一旦釋放外面找不到原有的內(nèi)容了

全局棧內(nèi)存只有在頁面關(guān)閉的時候才會被釋放掉

如果當(dāng)前棧內(nèi)存沒有被釋放,那么之前在棧內(nèi)存中存儲的基本值也不會被釋放,能夠一直保存下來.

一般來說棧內(nèi)存是線性有序存儲,容量小,系統(tǒng)分配效率高。而堆內(nèi)存首先要在堆內(nèi)存新分配存儲區(qū)域,之后又要把指針(地址值)存儲到棧內(nèi)存中,效率相對就要低一些了。

垃圾回收方面,棧內(nèi)存變量基本上用完就回收了,而推內(nèi)存中的變量因為存在很多不確定的引用,只有當(dāng)所有指向堆內(nèi)存的指針全部銷毀之后才會被垃圾回收。

數(shù)據(jù)類型創(chuàng)建步驟

基本數(shù)據(jù)類型

var a = 12;

創(chuàng)建一個值,創(chuàng)建一個變量,讓變量和值關(guān)聯(lián)在一起,基本數(shù)據(jù)類型值都是直接存儲到棧內(nèi)存中的

引用數(shù)據(jù)類型

var a = {n:12};

創(chuàng)建一個堆內(nèi)存,把鍵值對存儲到內(nèi)存中,堆內(nèi)存地址放到棧中,共變量調(diào)用

引用數(shù)據(jù)類型值都是先開辟一個堆內(nèi)存,把東西存儲進去,最后把地址放到棧中供變量關(guān)聯(lián)使用所有的指針賦值哦都是指針的關(guān)聯(lián)指向

到此這篇關(guān)于JS堆棧內(nèi)存的運行機制的文章就介紹到這了,更多相關(guān)js堆棧內(nèi)存內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Javascript中使用parseInt函數(shù)需要注意的問題

    Javascript中使用parseInt函數(shù)需要注意的問題

    這篇文章主要介紹了Javascript中使用parseInt函數(shù)需要注意的問題,本文講解了parseInt函數(shù)在IE8下可能會返回0值的兼容問題解決方法,需要的朋友可以參考下
    2015-04-04
  • js鼠標(biāo)單擊和雙擊事件沖突問題的快速解決方法

    js鼠標(biāo)單擊和雙擊事件沖突問題的快速解決方法

    下面小編就為大家?guī)硪黄猨s鼠標(biāo)單擊和雙擊事件沖突問題的快速解決方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-07-07
  • Bootstrap4 gulp 配置詳解

    Bootstrap4 gulp 配置詳解

    這篇文章主要介紹了Bootstrap4 gulp 配置詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-01-01
  • JavaScript ParseFloat()方法

    JavaScript ParseFloat()方法

    parseFloat()方法可以解析一個字符串,并返回一個浮點數(shù)。本文給大家分享javascript parsefloat()方法的相關(guān)知識,對javascript parsefloat相關(guān)知識感興趣的朋友一起學(xué)習(xí)吧
    2015-12-12
  • uni-app?web-view的使用示例詳解

    uni-app?web-view的使用示例詳解

    這篇文章主要介紹了uni-app web-view的使用,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-07-07
  • Bootstrap前端開發(fā)案例一

    Bootstrap前端開發(fā)案例一

    Bootstrap前端開發(fā)案例一,這篇文章能夠幫助大家更還好的進行前端開發(fā)Bootstrap,相信大家會愛上Bootstrap
    2016-06-06
  • javascript實現(xiàn)C語言經(jīng)典程序題

    javascript實現(xiàn)C語言經(jīng)典程序題

    這篇文章主要介紹了javascript實現(xiàn)C語言經(jīng)典程序題的解題思路,感興趣的小伙伴們可以參考一下
    2015-11-11
  • js propertychange和oninput事件

    js propertychange和oninput事件

    項目中常遇到輸入框檢查的需求,比如即時搜索,用change事件?change事件失去焦點才發(fā)生,無法做到即時。keypresss事件?能監(jiān)聽到鍵盤,但監(jiān)聽不到鼠標(biāo)復(fù)制粘貼,不完美
    2014-09-09
  • JavaScript加強之自定義callback示例

    JavaScript加強之自定義callback示例

    callback回調(diào)函數(shù)在本文以自定義的方式出現(xiàn),感興趣的朋友可以參考下,希望對大家有所幫助
    2013-09-09
  • 一不小心就做錯的JS閉包面試題

    一不小心就做錯的JS閉包面試題

    這篇文章為大家推薦了許多經(jīng)典的JS閉包面試題,也可以說是一不小心就做錯的JS閉包面試題,感興趣的小伙伴們可以參考一下,自己試著解答這些大部分人都會做錯的JS閉包面試題,檢驗自己的知識水平
    2015-11-11

最新評論

平昌县| 延庆县| 盐池县| 屏边| 嘉峪关市| 龙里县| 义马市| 永安市| 木兰县| 恩平市| 巴林右旗| 丰宁| 梧州市| 渭源县| 若羌县| 浑源县| 西和县| 青阳县| 杭锦后旗| 西乌珠穆沁旗| 平陆县| 台前县| 开平市| 绥中县| 五家渠市| 南丰县| 呼玛县| 绍兴市| 河北区| 昂仁县| 腾冲县| 定远县| 丽水市| 扎兰屯市| 原平市| 福鼎市| 孟津县| 嘉善县| 嘉兴市| 木兰县| 嘉鱼县|