日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

JavaScript变量——栈内存or堆内存

發布時間:2025/7/14 javascript 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JavaScript变量——栈内存or堆内存 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原文??http://blog.csdn.net/xdd19910505/article/details/41900693

?

堆和棧這兩個字我們已經接觸多很多次,那么具體是什么存在棧中什么存在堆中呢?就拿?JavaScript?中的變量來說:

?

首先?JavaScript?中的變量分為基本類型和引用類型。

?

基本類型就是保存在棧內存中的簡單數據段,而引用類型指的是那些保存在堆內存中的對象。

?

?

?

1?、基本類型??

?

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

?

?

?

2?、引用類型

?

引用類型,值大小不固定,棧內存中存放地址指向堆內存中的對象。是按引用訪問的。如下圖所示:棧內存中存放的只是該對象的訪問地址,?在堆內存中為這個值分配空間??由于這種值的大小不固定,因此不能把它們保存到棧內存中。但內存地址大小的固定的,因此可以將內存地址保存在棧內存中。 這樣,當查詢引用類型的變量時, 先從棧中讀取內存地址, 然后再通過地址找到堆中的值。對于這種,我們把它叫做按引用訪問。

?

?

其他語言中的內存分配類似。

?

? ? ?PS:當我們看到一個變量類型是已知的,就分配在棧里面,比如INT,Double等。其他未知的類型,比如自定義的類型,因為系統不知道需要多大,所以程序自己申請,這樣就分配在堆里面。?

?

為什么會有棧內存和堆內存之分?

?

通常與垃圾回收機制有關。為了使程序運行時占用的內存最小。

?

當一個方法執行時,每個方法都會建立自己的內存棧,在這個方法內定義的變量將會逐個放入這塊棧內存里,隨著方法的執行結束,這個方法的內存棧也將自然銷毀了。因此,所有在方法中定義的變量都是放在棧內存中的;

?

當我們在程序中創建一個對象時,這個對象將被保存到運行時數據區中,以便反復利用(因為對象的創建成本通常較大),這個運行時數據區就是堆內存。堆內存中的對象不會隨方法的結束而銷毀,即使方法結束后,這個對象還可能被另一個引用變量所引用(方法的參數傳遞時很常見),則這個對象依然不會被銷毀,只有當一個對象沒有任何引用變量引用它時,系統的垃圾回收機制才會在核實的時候回收它。

?

轉載于:https://www.cnblogs.com/wxiaona/p/4998219.html

總結

以上是生活随笔為你收集整理的JavaScript变量——栈内存or堆内存的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。