新聞中心
js棧內(nèi)存和堆內(nèi)存的區(qū)別?
首先JavaScript中的變量分為基本類型和引用類型?;绢愋途褪潜4嬖跅?nèi)存中的簡單數(shù)據(jù)段,而引用類型指的是那些保存在堆內(nèi)存中的對象。

1、基本類型
基本類型有Undefined、Null、Boolean、Number 和String。這些類型在內(nèi)存中分別占有固定大小的空間,他們的值保存在??臻g,我們通過按值來訪問的。
2、引用類型
引用類型,值大小不固定,棧內(nèi)存中存放地址指向堆內(nèi)存中的對象。是按引用訪問的。如下圖所示:棧內(nèi)存中存放的只是該對象的訪問地址,在堆內(nèi)存中為這個值分配空間。由于這種值的大小不固定,因此不能把它們保存到棧內(nèi)存中。但內(nèi)存地址大小的固定的,因此可以將內(nèi)存地址保存在棧內(nèi)存中。 這樣,當查詢引用類型的變量時, 先從棧中讀取內(nèi)存地址, 然后再通過地址找到堆中的值。對于這種,我們把它叫做按引用訪問當我們看到一個變量類型是已知的,就分配在棧里面,比如INT,Double等。其他未知的類型,比如自定義的類型,因為系統(tǒng)不知道需要多大,所以程序自己申請,這樣就分配在堆里面?;绢愋痛笮」潭ǎ妙愋痛笮〔还潭?,分開存放使得程序運行占用內(nèi)存最小。
js堆和棧的區(qū)別?
js堆和棧主要區(qū)別兩方面:
1、操作方式不同
棧由操作系統(tǒng)自動分配和釋放,用于存放簡單的數(shù)據(jù)段,占據(jù)固定大小的空間。
堆是自主分配和釋放,若不主動釋放,程序結(jié)束時由第三方回收。
2、數(shù)據(jù)結(jié)構(gòu)不同
JavaScript通過數(shù)組的方式,模仿實現(xiàn)堆棧。
棧:棧是一種運算受限的線性表,把新元素放到棧頂元素的上面,使之成為新的棧頂元素稱作進棧、入棧。
堆:堆是優(yōu)先隊列,也就是說隊列中存在執(zhí)行時會根據(jù)優(yōu)先級找優(yōu)先度最高的先執(zhí)行。
一、 堆(heap)和棧(stack)
棧(stack)會自動分配內(nèi)存空間,會自動釋放。堆(heap)動態(tài)分配的內(nèi)存,大小不定也不會自動釋放。
二、 基本類型和引用類型
基本類型:簡單的數(shù)據(jù)段,存放在棧內(nèi)存中,占據(jù)固定大小的空間。
引用類型:指那些可能由多個值構(gòu)成的對象,保存在堆內(nèi)存中,包含引用類型的變量實際上保存的不是變量本身,二十指向該對象的指針。
基本數(shù)據(jù)類型包括Undefined,String,Boolean,Null,Number
三、 傳值和傳址
從一個向另一個變量復制引用類型的值,復制的其實是指針,因此兩個變量最終指向同一個對象。即復制的是棧中的地址而不是堆中的對象。
從一個變量復向另一個變量復制基本類型的值,會創(chuàng)建這個值的副本。
js堆和棧存儲數(shù)據(jù)的區(qū)別?
1,js堆和棧存儲數(shù)據(jù)的區(qū)別在于它們的數(shù)據(jù)類型和存儲方式不同。
2,堆和棧是js中常見的兩種數(shù)據(jù)存儲方式,堆用于存儲復雜的數(shù)據(jù)類型,而棧用于存儲基本數(shù)據(jù)類型和函數(shù)的引用。
棧中的數(shù)據(jù)按照先進后出的順序存儲,而堆中的數(shù)據(jù)沒有順序之分,可以隨時讀寫。
由于堆是動態(tài)分配的,它不需要提前定義大小,在需要的時候會分配出內(nèi)存來存儲數(shù)據(jù)。
3,在js中,通過棧和堆來存儲數(shù)據(jù),可以極大地節(jié)省內(nèi)存的使用。
在編寫代碼時,我們應(yīng)該根據(jù)所需的數(shù)據(jù)類型和訪問方式,合理地選擇堆或棧來存儲數(shù)據(jù)。
同時,我們還要注意內(nèi)存泄露等問題,防止浪費內(nèi)存。
到此,以上就是小編對于java中棧內(nèi)存和堆內(nèi)存有什么區(qū)別嗎的問題就介紹到這了,希望這3點解答對大家有用。
網(wǎng)頁題目:Java中棧內(nèi)存和堆內(nèi)存有什么區(qū)別
標題路徑:http://m.5511xx.com/article/djhdcio.html


咨詢
建站咨詢
