位置: IT常识 - 正文

堆和栈详解js(js栈堆的区别)

编辑:rootadmin
堆和栈详解js 认识堆和栈

推荐整理分享堆和栈详解js(js栈堆的区别),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:js 堆和栈,堆和栈java,js 堆和栈,堆栈 js,堆栈 js,js堆和栈的区别 阮一峰,js 堆和栈,js 堆和栈,内容如对您有帮助,希望把文章链接给更多的朋友!

学习编程的时候,经常会看到stack这个词,它的中文名字叫做"栈"。

理解这个概念,对于理解程序的运行至关重要。容易混淆的是,这个词其实有几种含义

在理解堆与栈这两个概念时,需要放到具体的场景下去理解。一般情况下有两层含义:

(1)内存操作场景下,堆与栈表示两种内存的管理方式。

(2)数据结构场景下,堆与栈表示两种常用的数据结构。

1、内存操作场景

stack的第一种含义是存放数据的一种内存区域。程序运行的时候,需要内存空间存放数据。一般来说,系统会划分出两种不同的内存空间:一种叫做stack(栈),另一种叫做heap(堆)。

它们的主要区别是:stack是有结构的,每个区块按照一定次序存放,可以明确知道每个区块的大小;

heap是没有结构的,数据可以任意存放。因此,stack的寻址速度要快于heap。

三个变量和一个对象实例在内存中的存放方式如下:

从上图可以看到,i、y和cls1都存放在stack,因为它们占用内存空间都是确定的,而且本身也属于局部变量。但是,cls1指向的对象实例存放在heap,因为它的大小不确定。作为一条规则可以记住,所有的对象都存放在heap。

接下来的问题是,当Method1方法运行结束,会发生什么事?

回答是整个stack被清空,i、y和cls1这三个变量消失,因为它们是局部变量,区块一旦运行结束,就没必要再存在了。而heap之中的那个对象实例继续存在,直到系统的垃圾清理机制(garbage collector)将这块内存回收。因此,一般来说,内存泄漏都发生在heap,即某些内存空间不再被使用了,却因为种种原因,没有被系统回收。

栈由操作系统自动分配和释放,比如基本数据类型(Number、String、Boolean……)和函数的参数值等。

堆由开发人员自主分配和释放,若不主动释放,程序结束时由浏览器回收,用于存储引用类型

2、数据结构场景

JavaScript存在栈和队列概念,通过数组的方式,模仿实现堆栈。

栈:栈是一种运算受限的线性表,其限制是指只仅允许在表的一端进行插入和删除操作,这一端被称为栈顶(Top),相对地,把另一端称为栈底(Bottom)。把新元素放到栈顶元素的上面,使之成为新的栈顶元素称作进栈、入栈或压栈(Push);把栈顶元素删除,使其相邻的元素成为新的栈顶元素称作出栈或退栈(Pop)。通过数组的push()、pop()方法实现栈。

stack的第一种含义是一组数据的存放方式,特点为LIFO,即后进先出(Last in, first out) 。

与这种结构配套的,是一些特定的方法,主要为下面这些。

push:在最顶层加入数据。pop:返回并移除最顶层的数据。top:返回最顶层数据的值,但不移除它。isempty:返回一个布尔值,表示当前stack是否为空栈。

堆:堆其实是一种优先队列,也就是说队列中存在优先级,比如队列中有很多待执行任务,执行时会根据优先级找优先度最高的先执行。

堆和栈详解js(js栈堆的区别)

堆的特点是"无序"的key-value"键值对"存储方式。

我们想要在书架上找到想要的书,最直接的方式就是通过查找书名,书名就是我们的key。拿着这把key,就可以轻松检索到对应的书籍。

"堆的存取方式跟顺序没有关系,不局限出入口"。

一、js的数据类型

为了更好容易的理解堆和栈,首先来复习一下js中的数据类型。在js中数据类型主要分为以下两大类:

类型

内容

基本类型

String,Number,Boolean,Null,Undefined,这5种基本数据类型它们是直接按值存放的,所以可以直接访问。(简单的数据段,存放在栈内存中,占据固定大小的空间。内存地址大小的固定的,在堆内存中为值分配空间。由于这种值的大小不固定,因此不能把它们保存到栈内存中。但可以将内存地址保存在栈内存中)

引用类型

Function,Array,Object,当我们需要访问这三种引用类型的值时,因为包含引用类型的变量实际上保存的不是变量本身,而是指向该对象的指针。所以,首先得从栈中获得该对象的地址指针,然后再从堆内存中取得所需的数据。(引用类型保存在堆内存中,包含引用类型的变量实际上保存的不是变量本身,而是指向该对象的指针。)

二、什么是堆什么是栈

创建数据的时候就会占用内存、内存主要开辟了两类空间

结构

内容

栈(stack)

由操作系统自动分配内存空间,自动释放,存储的是基础变量以及一些对象的引用变量,占据固定大小的空间。

堆(heap)

由操作系统动态分配的内存,大小不定也不会自动释放,一般由程序员分配释放,也可由垃圾回收机制回收(程序结束时由浏览器回收)。

优缺点:

结构

优点:

缺点:

栈(stack)

栈中的内容是操作系统自动创建、自动回收,占据固定大小的空间,因此内存可以及时得到回收,相对于堆来说,更加容易管理内存空间。

相比于堆来说存取速度会快,并且栈内存中的数据是可以共享的,例如同时

本文链接地址:https://www.jiuchutong.com/zhishi/300404.html 转载请保留说明!

上一篇:【小程序开发】—— 封装自定义弹窗组件(小程序开发定制)

下一篇:【TypeScript】TS进阶-函数重载(七)(typescript tsconfig)

  • 拼多多确认收货自动拍摄评价怎么取消(拼多多确认收货期限是几天)

    拼多多确认收货自动拍摄评价怎么取消(拼多多确认收货期限是几天)

  • 66w充电器可以充22.5w的手机吗(66w充电器可以充40w的手机吗)

    66w充电器可以充22.5w的手机吗(66w充电器可以充40w的手机吗)

  • 小米手机盲人模式怎么开启(小米手机盲人模式)

    小米手机盲人模式怎么开启(小米手机盲人模式)

  • 重置电脑时出现问题,未执行任何更改(重置电脑时出现问题未能进行更改的原因)

    重置电脑时出现问题,未执行任何更改(重置电脑时出现问题未能进行更改的原因)

  • vmware workstation安装教程(vmware workstation安卓版)

    vmware workstation安装教程(vmware workstation安卓版)

  • 华为nova7se支持无线充电的吗(华为nova7se支持广电5g吗)

    华为nova7se支持无线充电的吗(华为nova7se支持广电5g吗)

  • 看抖音怎么横屏(看抖音怎么横屏播放)

    看抖音怎么横屏(看抖音怎么横屏播放)

  • 抖音集卡任务会刷新吗(抖音集卡任务会封号吗)

    抖音集卡任务会刷新吗(抖音集卡任务会封号吗)

  • 为什么通话会自动挂断(为什么通话会自动结束)

    为什么通话会自动挂断(为什么通话会自动结束)

  • 迅雷下载0kb什么情况(迅雷下载为0)

    迅雷下载0kb什么情况(迅雷下载为0)

  • 腾讯会议超时了怎么办(腾讯会议超时了需要重建吗)

    腾讯会议超时了怎么办(腾讯会议超时了需要重建吗)

  • 淘宝竞拍成功不想要了怎么办(淘宝竞拍成功了,卖家不卖了要怎么办!!)

    淘宝竞拍成功不想要了怎么办(淘宝竞拍成功了,卖家不卖了要怎么办!!)

  • 钉钉麦克风怎么关(钉钉麦克风怎么不出声音)

    钉钉麦克风怎么关(钉钉麦克风怎么不出声音)

  • 华为p30为什么老是卡(华为p30为什么老是自动调亮度)

    华为p30为什么老是卡(华为p30为什么老是自动调亮度)

  • 腾讯视频签到不见了(腾讯视频签到不了怎么办)

    腾讯视频签到不见了(腾讯视频签到不了怎么办)

  • 微博草稿箱能恢复吗(微博的草稿箱误删了怎么找回)

    微博草稿箱能恢复吗(微博的草稿箱误删了怎么找回)

  • mt6762处理器等于骁龙(mt6762处理器等于A几)

    mt6762处理器等于骁龙(mt6762处理器等于A几)

  • 怎么查看淘宝设置的提醒(怎么查看淘宝设置的密码)

    怎么查看淘宝设置的提醒(怎么查看淘宝设置的密码)

  • 淘宝扫码寄快递怎么查看订单(淘宝扫码寄快递有风险吗)

    淘宝扫码寄快递怎么查看订单(淘宝扫码寄快递有风险吗)

  • iphone11怎么双卡双待(iphone11 如何双卡)

    iphone11怎么双卡双待(iphone11 如何双卡)

  • 删掉的图片怎么找回来(删掉的图片怎么找回来免费)

    删掉的图片怎么找回来(删掉的图片怎么找回来免费)

  • 手机上取消qq绿钻续费(手机qq怎么关闭绿钻自动续费)

    手机上取消qq绿钻续费(手机qq怎么关闭绿钻自动续费)

  • qq通话记录在哪里(qq通话记录在哪里查看2020)

    qq通话记录在哪里(qq通话记录在哪里查看2020)

  • DedeCMS安装完成 Deprecated: Function ereg_replace(dedecms下载)

    DedeCMS安装完成 Deprecated: Function ereg_replace(dedecms下载)

  • 一次性劳务所得税怎么算
  • 堤防是啥
  • 补缴以前年度附加税如何入账
  • 资产负债表的累计折旧期末数怎么填
  • 年审和税审的区别是什么
  • 抄税报税清卡怎么操作流程
  • 广告公司好进吗
  • 施工单位给你钱敢领吗
  • 银行存款收款凭证是原始凭证吗
  • 拒绝税务检查的情形
  • 建筑公司不需要预缴增值税的有
  • 单位付款方式
  • 交股权印花税需要什么材料
  • 开专用发票可以不写单位与型号么?
  • 物业公司一般纳税人怎么抵扣
  • 关于增值税普通发票开票信息填写要求
  • 免税发票上税率是多少
  • 先收钱后开票怎么做分录
  • 计提固定资产折旧
  • 固定资产的处理方法
  • 包装物押金为什么含税
  • 暂存款借方余额
  • 暂估入库结转成本账务处理
  • PHP:image2wbmp()的用法_GD库图像处理函数
  • 小企业会计科目表
  • h5页面跳转小程序不显示按钮
  • php反序列化漏洞原理
  • 企业所得税申报表A类
  • 大前端需要掌握什么技能
  • layui 树形
  • 职工福利能开专票吗
  • 入库税款异常是啥意思
  • 注册公司行业分类有多少种
  • 应收预收的区别
  • 织梦前台数据不能存入中文
  • 母公司吸收合并全资子公司
  • 用友t3制单日期定住不变
  • 工会经费支出实施细则
  • 小微企业如何升级一般纳税人
  • 免征增值税和增值税免税
  • 个体工商户是否属于企业
  • 减免增值税计入营业外收入明细科目
  • 纳税人办理普通发票流程
  • 利润表中本月数,本期金额指什么
  • 销售货物收入指企业销售什么取得的收入
  • 行程单入账多久钱能到账
  • 汇算清缴补交的所得税怎么记帐
  • 预计负债是暂时性差异还是永久性差异
  • 退货只能退一半价钱合理吗
  • 记账凭证应交税费填写样本图片
  • 本月没有销售怎么做账
  • 抵扣认证的发票需要还回去吗
  • 企业计提坏账准备遵循的会计信息质量要求是
  • 体检收据可以入档案吗
  • 施工图审查费计算公式
  • sqlserver重命名表名
  • 查看linux服务器内存命令
  • Windows Server 2008制作密码重设盘
  • 虚拟网络无网络访问权限
  • 国产系统叫啥
  • win7虚拟内存如何转移到D盘
  • Win8系统网络SSID怎么设置?Win8设置网络SSID的方法
  • linux在实际工作中的应用
  • 桌面预览怎么设置
  • 安卓闹钟软件下载
  • excel文档权限设置
  • js中的filter方法和map方法
  • nodejs实现HTTPS发起POST请求
  • jquery 模态框实现
  • 简述shell命令提示符的组成
  • javascript运用
  • 深入理解新发展理念
  • python怎么编函数
  • javascript中的函数该如何理解
  • 彩票税率税率
  • 收购发票怎么抵扣申报
  • 闵行税务稽查局
  • 第三方审计报告需要多久
  • 小规模纳税人的开票
  • 增值税普通发票有什么用
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设