美文网首页
Js堆棧理解

Js堆棧理解

作者: 行走在黑夜下的舞者 | 来源:发表于2021-05-24 14:21 被阅读0次

栈(stack) 自动分配的内存空间,它由系统自动释放

堆(heap) 动态分配的内存,大小不定也不会自动释放。

眾所周知,js的變量分基礎類型引用類型;

基礎類型: (String, Number, Boolean, Null, UndefinedSymbol)基礎類型在內存中具有: 佔據空間小,大小固定的特點,且值保存在棧(stack)空間,按值訪問.

引用類型: (對象, 數組, 函數)引用類型在內存中具有: 佔據空间大、大小不固定的特點, 棧內存中存放的地址指向堆(heap)内存中的对象。是按引用訪問的.

接下來我們看兩個例子:

堆棧理解

從上面的例子我們可以看到,基礎類型變量發生複製的行為時,系統會為新的變量分配一個值,跟複製的變量值是互相獨立的且沒有絲毫的影響的,

但引用類型的複製就不一樣了,可以看到當d引用了c的對象值後c發生改變,d也隨之發生改變.

堆棧內存&垃圾回收機制

如我上述所言,基礎類型是存放在棧裡面,按值訪問,引用類型是存放在棧裡面的地址引用了堆內存的對象,是引用訪問.又因為要實現垃圾回收機制,所以每一個基礎類型的值在當前的執行調用棧環境裡面執行完後,就會被自然銷毀.而引用類型的對象,存放在堆內存中並不一定會隨之執行棧的結束而自動銷毀.當對象被其它變量引用時,系統就不會回收它,只有當一個對象沒有任何變量引用它時,系統才會回收.所以我們常見一些對象或者方法在執行完後會有 A = null 的類似賦值.

相关文章

  • Js堆棧理解

    栈(stack) 自动分配的内存空间,它由系统自动释放; 堆(heap) 动态分配的内存,大小不定也不会自动释放。...

  • js : 棧内存+堆内存+内存释放

    棧内存和堆内存 棧内存:提供了一个供JS代码执行的环境全局作用域私有所拥域 堆内存:存储引用数据类型的数据函数数据...

  • JS基础稳固堆和栈理解

    什么是堆和栈? 堆和栈都是运行时内存中分配的一个数据区,因此也被称为堆区和栈区,但二者存储的数据类型和处理速度不同...

  • 从零学java笔录-第23篇数组2java中内存分配及棧、堆的区

    本节主要内容: 1:java中内存分配及棧、堆的区别 2:本节总结&下节预告 本文出处:《凯哥陪你学系列之java...

  • 江湖正傳之①:桃花鎮

    1 “歸來客棧”的門面並不大,裝飾也不考究,只是一間普通的客棧。它和其他客棧惟一的區別就是乾淨。它里面的桌子,“擦...

  • 关于JS的堆和栈的理解

    一、堆(heap)和栈(stack) 栈(stack)会自动分配内存空间,会自动释放。堆(heap)动态分配的内存...

  • 理解js里堆和栈的意义

    一、 堆(heap)和栈(stack) 栈(stack)会自动分配内存空间,会自动释放。堆(heap)动态分配的内...

  • 堆的理解

    参考hac师傅的博客和CTF-wiki自己总结一下。理解有误,请多指正。 堆块概念 堆为程序运行时可以由程序动态申...

  • 理解托管堆

    原文链接:https://docs.unity3d.com/Manual/BestPracticeUndersta...

  • JS中的基本数据类型与所在内存空间那些事

    一、内存空间 为了便于理解,我们暂且先将Js的内存分为栈内存和堆内存。 JavaScript具有垃圾自动回收机制,...

网友评论

      本文标题:Js堆棧理解

      本文链接:https://www.haomeiwen.com/subject/mxvsaxtx.html