位置: 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)

  • 洋气的企业名字(洋气的qq名字)(好听企业名字)

    洋气的企业名字(洋气的qq名字)(好听企业名字)

  • 抖音怎么解绑学校(抖音怎么解绑学校认证)

    抖音怎么解绑学校(抖音怎么解绑学校认证)

  • vivi手机是什么牌子(vivi手机是什么公司的)

    vivi手机是什么牌子(vivi手机是什么公司的)

  • 微信好友被删除了聊天记录还能恢复吗(微信好友被删除朋友圈怎么显示)

    微信好友被删除了聊天记录还能恢复吗(微信好友被删除朋友圈怎么显示)

  • 闲鱼永久封了咋办(闲鱼永久封了咋解封啊)

    闲鱼永久封了咋办(闲鱼永久封了咋解封啊)

  • 通过局域网方式接入Internet必需的硬件有(通过局域网上网的计算机的ip地址)

    通过局域网方式接入Internet必需的硬件有(通过局域网上网的计算机的ip地址)

  • 华为p40怎样设置返回键(华为p40怎样设置简易模式)

    华为p40怎样设置返回键(华为p40怎样设置简易模式)

  • 小米怎么把旧手机资料导入新手机(小米怎么把旧手机数据转到新手机)

    小米怎么把旧手机资料导入新手机(小米怎么把旧手机数据转到新手机)

  • 腾讯视频可以登录几台设备(腾讯视频可以登陆几个手机)

    腾讯视频可以登录几台设备(腾讯视频可以登陆几个手机)

  • 快手怎么看收藏(快手怎么看收藏店铺)

    快手怎么看收藏(快手怎么看收藏店铺)

  • 钉钉用倍速看回放老师知道吗(钉钉用倍速看回放有时长记录吗)

    钉钉用倍速看回放老师知道吗(钉钉用倍速看回放有时长记录吗)

  • 苹果拉黑短信显示什么(苹果短信拉黑了还会显示已送达吗)

    苹果拉黑短信显示什么(苹果短信拉黑了还会显示已送达吗)

  • 闲鱼交易成功要收手续吗(闲鱼交易成功要收服务费吗)

    闲鱼交易成功要收手续吗(闲鱼交易成功要收服务费吗)

  • 魅族17有没有无线充电(魅族17带nfc吗)

    魅族17有没有无线充电(魅族17带nfc吗)

  • cltal00是什么型号(cltal00价格)

    cltal00是什么型号(cltal00价格)

  • iphone11promax可以用5G吗(iphone11promax可以用20w快充吗)

    iphone11promax可以用5G吗(iphone11promax可以用20w快充吗)

  • 爱奇艺没有网络怎么回事(爱奇艺没有网络能投屏到电视吗)

    爱奇艺没有网络怎么回事(爱奇艺没有网络能投屏到电视吗)

  • 发出的红包可以撤回吗(发出的红包可以删除吗)

    发出的红包可以撤回吗(发出的红包可以删除吗)

  • pst文件怎么打开(pst 文件)

    pst文件怎么打开(pst 文件)

  • ps的图层蒙版怎么用(ps的图层蒙版怎么做)

    ps的图层蒙版怎么用(ps的图层蒙版怎么做)

  • 怎样发送淘宝店铺链接(淘宝开店怎么发布)

    怎样发送淘宝店铺链接(淘宝开店怎么发布)

  • ipad pencil有必要买吗(ipadpencil有必要吗)

    ipad pencil有必要买吗(ipadpencil有必要吗)

  • 如何修改exe程序(怎么修改exe程序)

    如何修改exe程序(怎么修改exe程序)

  • 网络nat类型(网络nat类型检测在线)

    网络nat类型(网络nat类型检测在线)

  • win10远程连接切换用户重复输入登录密码解决教程(win10 打开远程连接)

    win10远程连接切换用户重复输入登录密码解决教程(win10 打开远程连接)

  • 提足折旧是指
  • 应纳税所得额是利润总额吗
  • 政府会计制度等式
  • 原值和净值在报表怎么找
  • 从企业分红所得税怎么算
  • 什么时候确认应收股利
  • 异地施工如何缴工会经费
  • 员工报销医疗费怎么做账
  • 运输费用和保险费用会计分录
  • 小微企业利息收入增值税
  • 工会经费怎样申报
  • 生产经营期间固定资产报废清理的净损失
  • 加计扣除退回的所得税怎么做账
  • 服装公司进布料一般进多少
  • 金税盘发票号码确认显示不全
  • 公司买车可以抵什么税
  • 纳税服务一体化综合监督工作情况报告
  • 药用植物所
  • 原始凭证填写错误,可撕毁重新编制一张
  • 政府采购 汽车
  • 小规模纳税人季度超过30万怎么纳税
  • 财产租赁所得的税率是多少
  • 合伙企业收到投资款要缴纳印花税吗
  • 拦截恶意网址是什么意思
  • SQL Server2005、2008如何彻底删除卸载并重新安装?
  • 事业单位采购管理办法
  • 如何加快身体的新陈代谢
  • cmos是bios参数设置的
  • 什么级别的cpu需要水冷
  • PHP:mcrypt_generic_end()的用法_Mcrypt函数
  • 无偿接收股权
  • php获取上个月第一天
  • 海运发票模板
  • 完美解决索尼电视arc无声音
  • php中文出现乱码
  • 未开票收入申报对企业有什么影响
  • 捐款怎么处理
  • 固定资产为什么提折旧,有何实际意义
  • 元宇宙与nft
  • python中如何读取列表中的指定
  • 员工买材料报销分录
  • 出口不退税需要备案吗
  • 织梦相关文章调用
  • 月末研发支出会结转至哪个账户
  • 资本公积转为实收资本会计科目
  • 已认证的增值税专用发票可以作废吗
  • 厂房监理要点
  • 发给客户的红包是什么费用
  • 出口退税申报的报关单无电子信息
  • 用友T3怎么结转成本费用
  • 工会经费账务处理流程
  • 营改增 交通运输
  • 等额本金还款计算公式
  • 废品损失如何处理
  • 利润为负还要交增值税吗
  • windows下启动mysql的命令是什么
  • mysql 5.6 从陌生到熟练之_数据库备份恢复的实现方法
  • win7任务栏功能
  • ghost怎么安装gho文件
  • win7回收站路径在哪里
  • mac如何恢复已删除文件
  • 怎么使用mac打电话
  • win7宽带连接错误651怎么办
  • win7旗舰版显示不全屏
  • 如何关闭win10自动升级win11
  • cocos2dx游戏开发
  • 根据公司发展需求
  • unity3d跨平台
  • 在页面中输出当前字符串的长度
  • [置顶]星陨计划
  • python遍历文本的每条数据
  • js中tolocalestring
  • 贵州省 税务局
  • 考察后多久公示公务员
  • 成都燃气在线查询
  • 安徽省定额发票真伪查询
  • 票种核定流程审批时间
  • 山东增值税普通发票查询
  • 企业支付的年度报告审计费
  • 农村复耕复产
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设