javascript內(nèi)存分配原理實例分析
本文實例講述了javascript內(nèi)存分配原理。分享給大家供大家參考,具體如下:
JavaScript中的變量分為兩種,原始值和引用值。原始值指的是原始數(shù)據(jù)類型的值,比如undefined,null,number,string,boolean類型所表示的值。引用值指的是復合數(shù)據(jù)類型的值,即Object,Function,Array等。
原始值和引用值存儲在內(nèi)存中的位置分別為棧和堆。原始值是存儲在棧中的簡單數(shù)據(jù)段,他們的值直接存儲在變量訪問的位置。引用值是存儲在堆中的對象。
存儲在棧中的值是一個指針,指向存儲在堆中的實際對象。
我們來看一段代碼:
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)存分析圖:

由上圖可知我們無法直接操作存儲在堆中的數(shù)據(jù),但是我們可以通過棧中的引用來操作對象。那么為什么要分開呢?不都是存儲在內(nèi)存中嗎?
棧的優(yōu)勢就是存取速度比堆要快,僅次于直接位于CPU中的寄存器,但缺點是,存在棧中的數(shù)據(jù)大小與生存期必須是確定的,缺乏靈活性。堆的優(yōu)勢是可以動態(tài)地分配內(nèi)存大小,生存期也不必事先告訴編譯器,垃圾收集器會自動地收走這些不再使用的數(shù)據(jù),但是缺點是由于在運行時動態(tài)分配內(nèi)存,所以存取速度較慢。
所以相對于簡單數(shù)據(jù)類型而言,他們占用內(nèi)存比較小,如果放在堆中,查找會浪費很多時間,而把堆中的數(shù)據(jù)放入棧中也會影響棧的效率。比如對象和數(shù)組是可以無限拓展的,正好放在可以動態(tài)分配大小的堆中。
更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《javascript面向?qū)ο笕腴T教程》、《JavaScript錯誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript數(shù)學運算用法總結(jié)》
希望本文所述對大家JavaScript程序設(shè)計有所幫助。
相關(guān)文章
JavaScript高級程序設(shè)計 閱讀筆記(十九) js表格排序
js表格排序?qū)崿F(xiàn)代碼,需要的朋友可以參考下2012-08-08
實現(xiàn)JavaScript中數(shù)據(jù)響應的方法總結(jié)
JavaScript 數(shù)據(jù)響應是一種重要的前端開發(fā)概念,是指在應用程序中的數(shù)據(jù)發(fā)生變化時,能夠自動更新與這些數(shù)據(jù)相關(guān)的用戶界面(UI)部分的能力,本文我們來總結(jié)一下目前可以簡單實現(xiàn) JavaScript 中的數(shù)據(jù)響應的方法,需要的朋友可以參考下2023-09-09

