摘要:本文會(huì)同步到我的個(gè)人網(wǎng)站中。將他們放在堆中是為了不影響棧的效率。而是通過(guò)引用的方式查找到堆中的實(shí)際對(duì)象再進(jìn)行操作。相對(duì)于簡(jiǎn)單數(shù)據(jù)類(lèi)型而言,簡(jiǎn)單數(shù)據(jù)類(lèi)型就比較穩(wěn)定,并且它只占據(jù)很小的內(nèi)存。
本文會(huì)同步到我的個(gè)人網(wǎng)站中。
在ECMAScript中,變量可以存放兩種類(lèi)型的值
原始值
引用類(lèi)型值
原始值指的是代表原始數(shù)據(jù)類(lèi)型的值,例如:undefined null number string boolean引用類(lèi)型指的是復(fù)合類(lèi)型值,例如:object function array 自定義對(duì)象
堆和棧
棧是一種LIFO的數(shù)據(jù)結(jié)構(gòu),即后進(jìn)先出,隊(duì)列是一種FIFO的數(shù)據(jù)結(jié)構(gòu),即先進(jìn)先出
堆是基于散列算法存放數(shù)據(jù)的一種數(shù)據(jù)結(jié)構(gòu)
原始值是存放在棧中的簡(jiǎn)單數(shù)據(jù)段,它們的值直接存儲(chǔ)在變量訪問(wèn)的位置,例如:
var num = 10; //變量名num和初始化值10都存放在棧中
引用值是存放在堆中的對(duì)象,引用值的變量名是一個(gè)存放在棧中指針,指向堆中的引用值對(duì)象,例如:
var obj = new object(); //變量名obj存放在棧中,而它指向的object()對(duì)象是存放在堆中的
為什么原始值要放在棧中,引用值要放在堆中?
先看一段代碼
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,"笨蛋的座右銘",25);
內(nèi)存分析
原始類(lèi)型變量num bol str的變量名和內(nèi)容都存放在棧中
引用類(lèi)型變量obj arr person的變量名作為指針存放在棧中,指向堆中的變量?jī)?nèi)容
由上圖可以看出,我們不能直接操作堆中的數(shù)據(jù),也就是說(shuō)不能直接操作對(duì)象,但我們可以通過(guò)棧中存放的變量指針來(lái)進(jìn)行操作
為什么要分堆和棧
堆比棧大,棧比堆的運(yùn)算速度快,對(duì)象是一個(gè)復(fù)雜的結(jié)構(gòu),并且可以自由擴(kuò)展,如:數(shù)組可以無(wú)限擴(kuò)充,對(duì)象可以自由添加屬性。將他們放在堆中是為了不影響棧的效率。而是通過(guò)引用的方式查找到堆中的實(shí)際對(duì)象再進(jìn)行操作。相對(duì)于簡(jiǎn)單數(shù)據(jù)類(lèi)型而言,簡(jiǎn)單數(shù)據(jù)類(lèi)型就比較穩(wěn)定,并且它只占據(jù)很小的內(nèi)存。不將簡(jiǎn)單數(shù)據(jù)類(lèi)型放在堆是因?yàn)橥ㄟ^(guò)引用到堆中查找實(shí)際對(duì)象是要花費(fèi)時(shí)間的,而這個(gè)綜合成本遠(yuǎn)大于直接從棧中取得實(shí)際值的成本。所以簡(jiǎn)單數(shù)據(jù)類(lèi)型的值直接存放在棧中
總結(jié)
兩種變量類(lèi)型:原始值和引用類(lèi)型值
變量在內(nèi)存中的存放位置分為堆和棧
歡迎關(guān)注我的公眾號(hào)文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/107848.html
摘要:我的是忙碌的一年,從年初備戰(zhàn)實(shí)習(xí)春招,年三十都在死磕源碼,三月份經(jīng)歷了阿里五次面試,四月順利收到實(shí)習(xí)。因?yàn)槲倚睦砗芮宄?,我的目?biāo)是阿里。所以在收到阿里之后的那晚,我重新規(guī)劃了接下來(lái)的學(xué)習(xí)計(jì)劃,將我的短期目標(biāo)更新成拿下阿里轉(zhuǎn)正。 我的2017是忙碌的一年,從年初備戰(zhàn)實(shí)習(xí)春招,年三十都在死磕JDK源碼,三月份經(jīng)歷了阿里五次面試,四月順利收到實(shí)習(xí)offer。然后五月懷著忐忑的心情開(kāi)始了螞蟻金...
摘要:本文作為第三篇,將會(huì)討論另一個(gè)開(kāi)發(fā)者容易忽視的重要主題內(nèi)存管理。我們也會(huì)提供一些關(guān)于如何處理內(nèi)存泄露的技巧。這是當(dāng)前整型和雙精度的大小。然而,這是一組可以收集的內(nèi)存空間的近似值。 本文轉(zhuǎn)載自:眾成翻譯譯者:Leslie Wang審校: 為之漫筆鏈接:http://www.zcfy.cc/article/4211原文:https://blog.sessionstack.com/how-j...
摘要:基礎(chǔ)知識(shí)復(fù)習(xí)后端掘金的作用表示靜態(tài)修飾符,使用修飾的變量,在中分配內(nèi)存后一直存在,直到程序退出才釋放空間。將對(duì)象編碼為字節(jié)流稱(chēng)之為序列化,反之將字節(jié)流重建成對(duì)象稱(chēng)之為反序列化。 Java 學(xué)習(xí)過(guò)程|完整思維導(dǎo)圖 - 后端 - 掘金JVM 1. 內(nèi)存模型( 內(nèi)存分為幾部分? 堆溢出、棧溢出原因及實(shí)例?線上如何排查?) 2. 類(lèi)加載機(jī)制 3. 垃圾回收 Java基礎(chǔ) 什么是接口?什么是抽象...
摘要:當(dāng)時(shí)自己在本地測(cè)試搭建集群后,給分配了另外一個(gè)任務(wù)就是去了解中的自帶分詞英文分詞中文分詞的相同與差異以及自己建立分詞需要注意的點(diǎn)。還有就是官網(wǎng)的文檔了,非常非常詳細(xì),還有,版本的是有中文的官方文檔,可以湊合著看。 前提 人工智能、大數(shù)據(jù)快速發(fā)展的今天,對(duì)于 TB 甚至 PB 級(jí)大數(shù)據(jù)的快速檢索已然成為剛需,大型企業(yè)早已淹沒(méi)在系統(tǒng)生成的浩瀚數(shù)據(jù)流當(dāng)中。大數(shù)據(jù)技術(shù)業(yè)已集中在如何存儲(chǔ)和處理這...
閱讀 1706·2021-11-04 16:11
閱讀 3439·2021-09-09 11:33
閱讀 1644·2019-08-30 15:54
閱讀 679·2019-08-30 15:44
閱讀 3268·2019-08-30 15:43
閱讀 2650·2019-08-30 13:06
閱讀 1760·2019-08-29 17:00
閱讀 969·2019-08-29 15:33