javascript內(nèi)存分配原理實(shí)例分析
本文實(shí)例講述了javascript內(nèi)存分配原理。分享給大家供大家參考,具體如下:
JavaScript中的變量分為兩種,原始值和引用值。原始值指的是原始數(shù)據(jù)類型的值,比如undefined,null,number,string,boolean類型所表示的值。引用值指的是復(fù)合數(shù)據(jù)類型的值,即Object,Function,Array等。
原始值和引用值存儲(chǔ)在內(nèi)存中的位置分別為棧和堆。原始值是存儲(chǔ)在棧中的簡(jiǎn)單數(shù)據(jù)段,他們的值直接存儲(chǔ)在變量訪問(wèn)的位置。引用值是存儲(chǔ)在堆中的對(duì)象。
存儲(chǔ)在棧中的值是一個(gè)指針,指向存儲(chǔ)在堆中的實(shí)際對(duì)象。
我們來(lái)看一段代碼:
function Person(id,name,age){ this.id = id; this.name = name; this.age = age; } var num = 10; var bol = true; var str = "abc"; var obj = new Object(); var arr = ['a','b','c']; var person = new Person(100,"jxl",22);
再看看內(nèi)存分析圖:
由上圖可知我們無(wú)法直接操作存儲(chǔ)在堆中的數(shù)據(jù),但是我們可以通過(guò)棧中的引用來(lái)操作對(duì)象。那么為什么要分開(kāi)呢?不都是存儲(chǔ)在內(nèi)存中嗎?
棧的優(yōu)勢(shì)就是存取速度比堆要快,僅次于直接位于CPU中的寄存器,但缺點(diǎn)是,存在棧中的數(shù)據(jù)大小與生存期必須是確定的,缺乏靈活性。堆的優(yōu)勢(shì)是可以動(dòng)態(tài)地分配內(nèi)存大小,生存期也不必事先告訴編譯器,垃圾收集器會(huì)自動(dòng)地收走這些不再使用的數(shù)據(jù),但是缺點(diǎn)是由于在運(yùn)行時(shí)動(dòng)態(tài)分配內(nèi)存,所以存取速度較慢。
所以相對(duì)于簡(jiǎn)單數(shù)據(jù)類型而言,他們占用內(nèi)存比較小,如果放在堆中,查找會(huì)浪費(fèi)很多時(shí)間,而把堆中的數(shù)據(jù)放入棧中也會(huì)影響棧的效率。比如對(duì)象和數(shù)組是可以無(wú)限拓展的,正好放在可以動(dòng)態(tài)分配大小的堆中。
更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《javascript面向?qū)ο笕腴T教程》、《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)》
希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。
- JavaScript對(duì)內(nèi)存分配及管理機(jī)制詳細(xì)解析
- 理解Javascript_01_理解內(nèi)存分配原理分析
- JavaScript 事件對(duì)內(nèi)存和性能的影響
- 深入理解JavaScript程序中內(nèi)存泄漏
- 跟我學(xué)習(xí)JScript的Bug與內(nèi)存管理
- JavaScript 變量、作用域及內(nèi)存
- JavaScript內(nèi)存管理介紹
- JavaScript的內(nèi)存釋放問(wèn)題詳解
- js變量、作用域及內(nèi)存詳解
- js內(nèi)存泄露的幾種情況詳細(xì)探討
- js 內(nèi)存釋放問(wèn)題
- JavaScript也談內(nèi)存優(yōu)化
相關(guān)文章
es6中的解構(gòu)賦值、擴(kuò)展運(yùn)算符和rest參數(shù)使用詳解
這篇文章分別給大家介紹了關(guān)于es6中解構(gòu)賦值、擴(kuò)展運(yùn)算符和rest參數(shù)使用的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2017-09-09uniapp使用u-upload組件來(lái)實(shí)現(xiàn)圖片上傳功能
最近在用uniapp開(kāi)發(fā)微信小程序,下面這篇文章主要給大家介紹了關(guān)于uniapp使用u-upload組件來(lái)實(shí)現(xiàn)圖片上傳功能的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-01-01js圖片上傳中file、bolb、base64圖片之間的相互轉(zhuǎn)化
這篇文章主要介紹了js圖片上傳中file、bolb、base64圖片之間的相互轉(zhuǎn)化,blob轉(zhuǎn)file,blob轉(zhuǎn)base64,base64轉(zhuǎn)file,使用canvas壓縮圖片,需要的朋友可以參考下2022-05-05利用JavaScript在網(wǎng)頁(yè)實(shí)現(xiàn)八數(shù)碼啟發(fā)式A*算法動(dòng)畫效果
這篇文章主要介紹了利用JavaScript在網(wǎng)頁(yè)實(shí)現(xiàn)八數(shù)碼啟發(fā)式A*算法動(dòng)畫效果,需要的朋友可以參考下2017-04-04webpack 自動(dòng)清理 dist 文件夾的兩種實(shí)現(xiàn)方法
這篇文章主要介紹了webpack 自動(dòng)清理 dist 文件夾的兩種實(shí)現(xiàn)方法,本文給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-06-06