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