JavaScript--淺談內存使用

JavaScript中的變量分爲基本類型和引用類型。函數

 

1.基本類型spa

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

 

2.引用類型對象

引用類型,值大小不固定,棧內存中存放地址指向堆內存中的對象。是按引用訪問的。棧內存中存放的只是該對象的訪問地址,在堆內存中爲這個值分配空間因爲這種值的大小不固定,所以不能把它們保存到棧內存中,由於系統不知道須要多大,因此程序本身申請,這樣就分配在堆裏面。但內存地址大小的固定的,所以能夠將內存地址保存在棧內存中。 這樣,當查詢引用類型的變量時, 先從棧中讀取內存地址, 而後再經過地址找到堆中的值。對於這種,咱們把它叫作按引用訪問。生命週期

 

3.爲何有棧內存,堆內存之分ip

爲了使程序運行時佔用的內存最小。當一個方法執行時,每一個方法都會創建本身的內存棧,在這個方法內定義的變量將會逐個放入這塊棧內存裏,隨着方法的執行結束,這個方法的內存棧也將天然銷燬了。所以,全部在方法中定義的變量都是放在棧內存中的;內存

當咱們在程序中建立一個對象時,這個對象將被保存到運行時數據區中,以便反覆利用(由於對象的建立成本一般較大),這個運行時數據區就是堆內存。堆內存中的對象不會隨方法的結束而銷燬,即便方法結束後,這個對象還可能被另外一個引用變量所引用(方法的參數傳遞時很常見),則這個對象依然不會被銷燬,只有當一個對象沒有任何引用變量引用它時,系統的垃圾回收機制纔會在覈實的時候回收它。作用域

因此棧上分配的內存系統自動釋放,堆上分配的內存,系統不釋放,哪怕程序退出,那一塊內存仍是在那裏。變量

 

4.執行環境垃圾回收

a. 執行環境決定了變量的生命週期,一些代碼能夠訪問變量的權限。這種機制有助於什麼時候釋放內存。
b.分全局執行環境(window)和函數執行環境。
c.函數的局部環境能夠訪問函做用域的變量,並且有權訪問包含(父)環境中的變量
d.全局環境不能訪問函數環境中的變量。
 
 
簡而言之,
經過執行環境決定變量生命週期,經過數據類型給予不一樣的內存空間,有助於系統自動釋放內存。
相關文章
相關標籤/搜索