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

  • 目前什么笔记本电脑比较好用(目前什么笔记本最好)(目前什么笔记本的屏幕最好)

    目前什么笔记本电脑比较好用(目前什么笔记本最好)(目前什么笔记本的屏幕最好)

  • 苹果13怎么从资源库移出软件(iphone13怎么导入资料)

    苹果13怎么从资源库移出软件(iphone13怎么导入资料)

  • 微信群头像怎么设置(微信群头像怎么变成空白人头)

    微信群头像怎么设置(微信群头像怎么变成空白人头)

  • 华为畅享10s如何隐藏应用(华为畅享10s如何长截屏)

    华为畅享10s如何隐藏应用(华为畅享10s如何长截屏)

  • 小牛中控电池怎么充电(小牛中控电池怎样补电)

    小牛中控电池怎么充电(小牛中控电池怎样补电)

  • iphone11拍照花屏(苹果手机拍照有一半花屏)

    iphone11拍照花屏(苹果手机拍照有一半花屏)

  • 华为nova7时间怎么设置24小时制(华为nova7时间怎么设置24小时)

    华为nova7时间怎么设置24小时制(华为nova7时间怎么设置24小时)

  • 老年机只能打紧急电话怎么回事(老年机只能打紧急呼叫电话怎么回事)

    老年机只能打紧急电话怎么回事(老年机只能打紧急呼叫电话怎么回事)

  • 怎么在表格顶端加标题(怎么在表格顶端显示所有表格选项卡内容)

    怎么在表格顶端加标题(怎么在表格顶端显示所有表格选项卡内容)

  • ppt支持mp4格式的视频吗(ppt支持mp4吗)

    ppt支持mp4格式的视频吗(ppt支持mp4吗)

  • 苹果id注销是退出吗(苹果id注销是退出登录吗)

    苹果id注销是退出吗(苹果id注销是退出登录吗)

  • 苹果x无面容影响大吗(苹果x无面容影响像素吗)

    苹果x无面容影响大吗(苹果x无面容影响像素吗)

  • 华为p30pro屏占比多少(华为p30 pro的屏幕大小)

    华为p30pro屏占比多少(华为p30 pro的屏幕大小)

  • 手机充电接触不良是什么原因(手机充电接触不良了维修大概多少钱)

    手机充电接触不良是什么原因(手机充电接触不良了维修大概多少钱)

  • 手机被中木马怎么办(手机中木马怎么发现)

    手机被中木马怎么办(手机中木马怎么发现)

  • iphone11是什么接口(苹果11是什么接口类型)

    iphone11是什么接口(苹果11是什么接口类型)

  • 微信买的电影票怎么改签(微信买的电影票能退吗)

    微信买的电影票怎么改签(微信买的电影票能退吗)

  • hashmap有序还是无序(java hashmap是否有序)

    hashmap有序还是无序(java hashmap是否有序)

  • vivox27pro支持无线充电吗(vivox27支持无线充电吗)

    vivox27pro支持无线充电吗(vivox27支持无线充电吗)

  • 手把手带你调参Yolo v5(二)(调参技巧)

    手把手带你调参Yolo v5(二)(调参技巧)

  • 二十场数学建模竞赛【详细思路+代码】总结(数学建模 比赛)

    二十场数学建模竞赛【详细思路+代码】总结(数学建模 比赛)

  • 这几个SQL语法的坑,你踩过吗(这几个sql语法的区别)

    这几个SQL语法的坑,你踩过吗(这几个sql语法的区别)

  • dedecms后台功能之用户组设定介绍(dedecms调用页面)

    dedecms后台功能之用户组设定介绍(dedecms调用页面)

  • 临时工工资列支工资吗
  • 房产公司企业所得税如何预征
  • 预提费用
  • 支付给职工以及为职工支付的现金包括哪些
  • 物业公司停车费按什么征税
  • 工程检测单位
  • 在建工程转固定资产需要什么附件
  • 应缴所得税包括哪些税种
  • 2021留美学生签证
  • 产成品返工如何处理
  • 免税农产品如何填报企业所得税季报
  • 企业购买固定资产的价款超过正常信用条件
  • 受托加工物资如何做账
  • 个人劳务费发票可以委托其他人去开吗
  • 再生资源税率多少合理
  • 增值税怎么补提
  • 开专票必须公对公付款不然不开
  • 中意装饰工程有限公司怎么样
  • 什么情况下附加税减半
  • 外币报表未分配利润折算
  • 进口付汇核销流程
  • 企业员工差旅平台排行
  • 以前年度损益调整属于哪类科目
  • 应收账款质押账户被冻结
  • 库存商品的进项可以抵扣吗
  • windows 10纯净版
  • 虚拟机怎么安装gcc
  • 摊销房租费如何做账
  • 税务局返还税款账务处理
  • win76g内存只有3g可用
  • wordpress注册界面
  • 计提坏账可以冲回吗
  • 应付职工薪酬怎么做记账凭证
  • 研发机构采购国产设备退税管理办法
  • 给员工报销
  • tensorflow theano
  • 隐藏php后缀
  • 应收账款收不回来的情况说明
  • 存货报废如何处理方案
  • 律师事务所的日记怎么写
  • 航天金税税控盘运行环境
  • 如何升级智慧中小学app
  • 返还个人所得税怎么操作
  • 送货单收据怎么写
  • 处置可供出售金融资产原先进入公允价值变动损益
  • 在建工程什么时候结转
  • mysql新手教程
  • 社保的账务处理分录
  • 其他应收款科目余额在贷方表示什么
  • 缴增值税的账务处理
  • 金税三期有什么用
  • 企业因受疫情影响导致停工停产的
  • 地方水利建设基金减免政策2023
  • 应付账款扣款分录
  • 收据注明实际到账时间
  • 认缴出资额承担责任怎么算
  • 工程施工的主要事迹
  • 营改增后工程项目计价规则也随之发生了改变对错
  • 企业预付账款是什么意思
  • 清产核资评估报告
  • xtrabackup备份原理
  • w10语言栏
  • dell power manager是什么
  • window8系统桌面啥样的
  • SFC无需光盘出马,硬盘搞定
  • linux在哪里操作
  • 在bootstrap中,有哪几种导航
  • chromexcel
  • Unity3D游戏开发毕业论文
  • nodejs登录成功跳转
  • js实现@功能
  • 安卓调用蓝牙接口
  • javascript学习指南
  • python 中
  • 用jquerymobile案例
  • 认识iu
  • WINDOWS中使用磁盘清理的主要作用是为了什么
  • 个人怎么在网上交医保和养老保险
  • 换电员工作时间自由吗
  • 五证合一后还需要去税务局吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设