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

  • WPSoffice2019如何插入对号(wps2016怎么样)

    WPSoffice2019如何插入对号(wps2016怎么样)

  • 手机怎么把视频镜像(手机怎么把视频传到电脑上)

    手机怎么把视频镜像(手机怎么把视频传到电脑上)

  • 抖音改头像审核多久(抖音改头像审核需要多久)

    抖音改头像审核多久(抖音改头像审核需要多久)

  • 华为手机浮窗权限怎么开启(华为手机浮窗权限未获取有什么影响)

    华为手机浮窗权限怎么开启(华为手机浮窗权限未获取有什么影响)

  • 光猫离线是怎么回事(光猫离线怎么弄)

    光猫离线是怎么回事(光猫离线怎么弄)

  • 小米cc9机身多长厘米(小米cc9手机尺寸长,宽多少)

    小米cc9机身多长厘米(小米cc9手机尺寸长,宽多少)

  • opporeno摄像头容易坏吗(opporeno摄像头参数)

    opporeno摄像头容易坏吗(opporeno摄像头参数)

  • cpu负载100是什么原因(cpu负载100%会怎么样)

    cpu负载100是什么原因(cpu负载100%会怎么样)

  • 开抖音小店有什么要求(开抖音小店有什么好处)

    开抖音小店有什么要求(开抖音小店有什么好处)

  • 抖音直播挂淘宝链接要求(抖音挂自己淘宝要收取什么费用)

    抖音直播挂淘宝链接要求(抖音挂自己淘宝要收取什么费用)

  • ipad2018录音功能在哪(ipad2019录音功能在哪)

    ipad2018录音功能在哪(ipad2019录音功能在哪)

  • al00b是华为什么型号(al00m是华为什么型号)

    al00b是华为什么型号(al00m是华为什么型号)

  • 手机怎么管理微信公众号(微信如何管理手机号)

    手机怎么管理微信公众号(微信如何管理手机号)

  • 二维码扫码付款怎么弄(二维码扫码付款被骗怎么办)

    二维码扫码付款怎么弄(二维码扫码付款被骗怎么办)

  • 荣耀20关闭后台程序(荣耀20怎么关闭程序运行)

    荣耀20关闭后台程序(荣耀20怎么关闭程序运行)

  • 华为9.0怎么信任软件(华为怎么设置信任设备)

    华为9.0怎么信任软件(华为怎么设置信任设备)

  • oppo呼吸灯怎么改颜色(oppo呼吸灯怎么关)

    oppo呼吸灯怎么改颜色(oppo呼吸灯怎么关)

  • 苹果官网换购流程(苹果官网买手机换购)

    苹果官网换购流程(苹果官网买手机换购)

  • 淘宝精选怎么做推广(淘宝精选是怎么上的)

    淘宝精选怎么做推广(淘宝精选是怎么上的)

  • 防沉迷怎么修改

    防沉迷怎么修改

  • iphone图片格式怎么改(iphone图片的格式)

    iphone图片格式怎么改(iphone图片的格式)

  • 红米note2蓝牙耳机怎么连接(红米note蓝牙耳机)

    红米note2蓝牙耳机怎么连接(红米note蓝牙耳机)

  • picsart把底色换成白色(picsart改底色)

    picsart把底色换成白色(picsart改底色)

  • 手机怎样修改路由器的密码(手机怎样修改路由器wifi密码修改)

    手机怎样修改路由器的密码(手机怎样修改路由器wifi密码修改)

  • 华硕主板关闭usb检测(华硕主板关闭usb充电)

    华硕主板关闭usb检测(华硕主板关闭usb充电)

  • 微信百万保障怎么解除(微信百万保障怎么取消自动续费)

    微信百万保障怎么解除(微信百万保障怎么取消自动续费)

  • 价外费用是含税价还是不含税价
  • 委托收款和托收承付结算方式,都受结算金额起点的限制
  • 商誉要摊销和减值吗?
  • 水利基金申报表减除项填什么
  • 网上申购到发行多长时间
  • 当月没有发生购销合同还要报印花税吗
  • 房地产开发企业销售自行开发的房地产项目
  • 发生销货退回的会计处理
  • 技术研发费加计扣除
  • 申报怎么打印
  • 个税全年一次性奖金单独计税
  • 公司进行债务重构的原因可能包括
  • 生产企业外购商品经过加工
  • 买了两个月社保能用多少医药费
  • 企事业单位承包承租经营者
  • 增值税减免明细表怎么填
  • 税费种认定功能在哪里
  • 账本印花税计税金额或件数怎么申报2023
  • 一般纳税人装饰装修工程税率
  • 客运服务费怎么开票
  • 环境资源的含义
  • 原材料销售出库会计分录
  • 一般企业可以开检测费吗
  • 打开游戏时总是出现需要新应用打开此MS
  • spf13-vim – Vim编辑器终极发布
  • 核销后怎么反核销
  • 个人劳务费怎么计算
  • 代发工资要缴纳社保吗
  • 苹果手机下载手机克隆哪个版本
  • 本月印花税下月缴纳需要计提吗
  • ftp pwd命令
  • 无限极分类mysql
  • 赔偿款财务如何做账
  • 最贵的手机苹果
  • 东京塔的意义
  • PHP:imagedashedline()的用法_GD库图像处理函数
  • 家属补助每月发多少钱
  • 前端 上传文件
  • 语音处理算法
  • vue3如何使用axios
  • 深度学习实战10-数学公式识别-将图片转换为Latex(img2Latex)
  • php时间戳转换成时间
  • thinkphp6.0完全开发手册
  • meta最新模型
  • 论文精读分析报告
  • 参加《2022 中国开发者影响力盛典》我的 4 重收获!
  • 织梦如何使用
  • 旅行社差额征税税率5%
  • sqlserver附加数据库语句
  • 金税四期对企业的影响与应对
  • 免税收入怎么做会计分录
  • 企业所得税纳税申报表
  • 固定资产处置损益怎么算
  • 应交增值税减免税款是什么意思
  • 预提费用在汇算清缴时调整,会计分录怎么做
  • 分配现金股利如何做会计分录长投
  • 固定资产账实不符违反的规定
  • 收到红字发票账务处理应附哪些资料呢
  • 顾客抽奖奖项名称
  • 未发货先开发票
  • 如何建立明细分类账
  • mysql中汉字用什么类型
  • mac怎么设置图片为桌面
  • mac系统怎么清理Adobe残留
  • WinXP系统建立VPN连接虚拟专用网络连接的途径
  • windows8.1开始
  • rtk api error=3
  • excel表格文本形式在哪里
  • 摄像机跟随与摄像的区别
  • js基础有哪些
  • mybatis框架执行流程
  • unity后期
  • jquery escape
  • js中调用java
  • javascript的简介
  • python for循环删除元素
  • android设计模式书籍
  • 国家浙江税务局
  • 深圳税局电子税务局
  • 新企业会计准则长期待摊费用
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设