美文网首页
栈内存、堆内存、队列

栈内存、堆内存、队列

作者: threetowns | 来源:发表于2017-12-29 11:39 被阅读0次

在学习内存空间之前,我们需要对三种数据结构有一个直观的认知,它们分别是:栈(stack)、堆(heap)与队列(queue)。

一、栈数据结构

JavaScript中并没有严格意义上区分 栈内存堆内存
但是在某些场景,我们仍然需要基于堆栈数据结构的思维来实现一些功能,比如:JavaScript的执行上下文,执行上下文的执行顺序借用了栈数据结构的存取方式。因此理解栈数据结构的原理与特点十分重要。

要简单理解栈的存取方式,我们可以通过类比乒乓球盒子来分析。如下图左侧。

栈内存 - 类比乒乓球盒子 - 先进后出,后进先出
这种乒乓球的存放方式与栈中存取数据的方式如出一辙。处于盒子中最顶层的乒乓球5,它一定是最后被放进去,但可以最先被使用。而我们想要使用底层的乒乓球1,就必须将上面的4个乒乓球取出来,让乒乓球1处于盒子顶层。
这就是栈空间先进后出,后进先出的特点。

二、堆数据结构

堆数据结构是一种树状结构。它的存取数据的方式,则与 书架与书 非常相似。

书虽然也整齐的存放在书架上,但是我们只要知道书的名字,我们就可以很方便的取出我们想要的书,而不用像从乒乓球盒子里取乒乓一样,非得将上面的所有乒乓球拿出来才能取到中间的某一个乒乓球。
好比在JSON格式的数据中,我们存储的key-value是可以无序的,因为顺序的不同并不影响我们的使用,我们只需要关心书的名字。

三、队列

在JavaScript中,理解队列数据结构的目的主要是为了清晰的明白事件循环(Event Loop)的机制到底是怎么回事。
队列是一种先进先出(FIFO)的数据结构。正如排队过安检一样,排在队伍前面的人一定是最先过检的人。用以下的图示可以清楚的理解队列的原理。

队列 - 先进先出 - 过安检

参考资料

相关文章

  • 栈内存、堆内存、队列

    在学习内存空间之前,我们需要对三种数据结构有一个直观的认知,它们分别是:栈(stack)、堆(heap)与队列(q...

  • 【Javascript】探究javascript中的堆/栈/任务

    堆/栈/队列 在javascript中,存在调用栈 (call stack)和内存堆(memory heap) ,...

  • 10.11java中的堆和栈

    java高级-堆和栈 java堆 /栈 栈内存 / 堆内存的区别 1. java堆 /栈 2. 栈内存 / 堆内存的区别

  • java中栈内存和堆内存有什么区别

    java中栈内存和堆内存有什么区别 栈内存和堆内存的区别: 1、栈内存用来存放基本类型的变量和引用变量,堆内存用来...

  • 内存

    内存的几大区域 栈内存和堆内存 所谓的栈内存和堆内存并不是内存里面有一块区域叫栈,有一块区域叫堆.所谓的栈内存和对...

  • 变量提升

    堆内存 & 栈内存 JS中的内存一共两种:堆内存和栈内存 堆内存 作用:用来存储引用数据类型值的内存空间叫做堆内存...

  • 堆和栈

    一 java 堆内存和栈内存 java把内存分为两种:一种是堆内存,一种是栈内存 堆: 堆内存主要存储实例化对象,...

  • Java内存结构和垃圾回收

    内存结构 java内存结构主要有三大区块:栈内存,堆内存,堆外内存(直接内存)。其中: 1.栈内存主要是存放线程的...

  • Java 工程师成神之路(2018 年修订版)

    基础篇 1.1 JVM JVM内存结构 堆、栈、方法区、直接内存、堆和栈区别。 Java内存模型 内存可见性、重排...

  • JS 垃圾回收

    内存 JS 数据的存储地址分为栈内存和堆内存。 栈内存 堆内存 在 JS 存放数据的内存中又分为高位和低位,其中高...

网友评论

      本文标题:栈内存、堆内存、队列

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