1. 程式人生 > >js棧內存和堆內存的區別

js棧內存和堆內存的區別

就是 棧內存 不能 定義 存在 占用內存 銷毀 asc 們的

首先JavaScript中的變量分為基本類型和引用類型。基本類型就是保存在棧內存中的簡單數據段,而引用類型指的是那些保存在堆內存中的對象。

1、基本類型

基本類型有Undefined、Null、Boolean、Number 和String。這些類型在內存中分別占有固定大小的空間,他們的值保存在棧空間,我們通過按值來訪問的。

2、引用類型

引用類型,值大小不固定,棧內存中存放地址指向堆內存中的對象。是按引用訪問的。如下圖所示:棧內存中存放的只是該對象的訪問地址,在堆內存中為這個值分配空間。由於這種值的大小不固定,因此不能把它們保存到棧內存中。但內存地址大小的固定的,因此可以將內存地址保存在棧內存中。 這樣,當查詢引用類型的變量時, 先從棧中讀取內存地址, 然後再通過地址找到堆中的值。對於這種,我們把它叫做按引用訪問當我們看到一個變量類型是已知的,就分配在棧裏面,比如INT,Double等。其他未知的類型,比如自定義的類型,因為系統不知道需要多大,所以程序自己申請,這樣就分配在堆裏面。基本類型大小固定,引用類型大小不固定,分開存放使得程序運行占用內存最小。

3、棧內存:存放基本類型。 堆內存:存放引用類型(在棧內存中存一個基本類型值保存對象在堆內存中的地址,用於引用這個對象。)

4、基本類型在當前執行環境結束時銷毀,而引用類型不會隨執行環境結束而銷毀,只有當所有引用它的變量不存在時這個對象才被垃圾回收機制回收。

js棧內存和堆內存的區別