位置: 编程技术 - 正文

javascript内存管理详细解析(js内存条)

编辑:rootadmin

介绍

低层次的语言,如C,具有低级别的内存管理命令,如:malloc()和free(),需要开发者手工释放内存。然而像javascript这样的高级语言情况则不同,对象(objects, strings 等)创建的时候分配内存,当他们不在使用的时候内存会被自动回收,这个自动回收的过程被称为垃圾回收。因为垃圾回收的存在,让javascript等高级语言开发者产生了一个错误的认识,以为可以不用关心内存管理。

内存生命周期

不管什么样的编程语言,内存的生命周期基本上是一致的。

1.分配你需要的内存

2.使用他进行读写操作

3.当内存不需要的时候,释放资源

步骤1和步骤2对于所有语言都一样,能明显觉察到。至于步骤3,低级别语言需要开发者显式执行。而对于像javascript这样的高级语言,这部分操作是交给解析器完成的,所以你不会觉察到。

javascript中的分配操作

值的初始化

在为变量赋值的时候,javascript会完成内存的分配工作。通过函数调用完成分配

一些函数当执行完毕之后,同样存在对象分配的情况发生。一些方法会分配新值或者对象。对值的使用

对值的使用,其实也就是对分配后的内存执行读写操作。这些操作包括:对变量或者对象的属性进行读写操作,或者向函数传递参数。

当不再需要的时候,释放内存

绝大多数内存管理的问题都发生在这个阶段。最难做的事情是,如何判定分配的内存不再需要。这往往需要开发者做出判定,程序在什么时候不再需要内存,并释放他所占资源。

高级语言的解析器中嵌入了一个叫做“垃圾收集器”的程序,他的工作是用来跟踪内存的分配和使用,判定内存是否被需要,在不再需要的时候执行资源释放操作。他只能获得一个近似值,因为判断一个内存是否被需要,这是个不确定的问题(不能通过一种算法解决)。

垃圾回收

正如上文所述,我们无法准确的做到自动判定“内存不再需要”。所以,垃圾回收对该问题的解决方案有局限性。本节将解释必要的概念,了解主要的垃圾收集算法和它们的局限性。

引用

垃圾回收中一个主要的概念是引用。在内存管理中,当一个对象无论是显式的还是隐式的使用了另外一个对象,我们就说他引用了另外一个对象。例如,javascript对象存在一个隐式的指向原型的引用,还有显式指向他的属性值的引用。

在这里,对象的概念超出了javascript传统意义上对象的概念,他还包括函数作用域和全局作用域。使用引用计数算法的垃圾回收

下面要介绍的是一种最理想化的算法,引入了 “对象不再需要” 和 “没有其他对象引用该对象” 的概念。当该对象的引用指针变为0的时候,就认为他可以被回收。

例子:限制:循环

该算法有其局限性,当一个对象引用另外一个对象,当形成循环引用时,即时他们不再被需要了,垃圾收集器也不会回收他们。现实中的例子ie6、7中,在dom对象上使用引用计数的算法,这里会存在内存泄露的问题。

标记 - 清除算法

他引入了“对象不再需要”和“对象不可访问(对象不可达)”的概念。该算法假设有一系列的根对象(javascript中的根对象就是全局对象),每隔一段时间,垃圾收集器就会从根对象开始,遍历所以他引用的对象,然后再遍历引用对象引用的对象,以此类推。使用这种方式,垃圾收集器可以获得所有可访问的对象,回收那些不可访问的对象。

这种算法比之前的算法好些,0引用的对象会被设置为不可访问对象,同时他也避免了循环引用造成的困恼。

截止年,大多数现代浏览器使用的是这种“标记-清除算法”的垃圾回收器。JavaScript垃圾收集领域(代/增量/并发/并行的垃圾收集),在过去的几年改善了与之相关的算法,但是垃圾收集算法本身(标记-清除算法)和“如何判定一个对象不再需要”并没有得以改善。

周期不再是一个问题

在第一个例子中,函数调用结束之后,这两个对象不会被全局对象引用,也不会被全局对象引用的对象引用。因此,他们会被javascript垃圾回收器标记为不可访问对象。这种事情同样也发生在第二个例子中,当div和事件处理函数被垃圾回收器标记为不可访问,他们就会被释放掉。

限制:对象需要明确的标记为不可访问

这种标记的方法存在局限,但是我们在编程中被没有接触到他,所以我们很少关心垃圾回收相关的内容。

推荐整理分享javascript内存管理详细解析(js内存条),希望有所帮助,仅作参考,欢迎阅读内容。

javascript内存管理详细解析(js内存条)

文章相关热门搜索词:javascript内存机制,js内存管理机制,js内存条,js内存地址,javascript内存机制,js内存释放,JavaScript内存管理,javascript内存机制,内容如对您有帮助,希望把文章链接给更多的朋友!

JavaScript对内存分配及管理机制详细解析 你可能听说过JAVA、.NET、PHP这些语言有垃圾回收的内存管理机制,但是很少会听到JavaScript也有自己的内存管理机制,JavaScript同样有着类似的垃圾回收功

javascript中怎么做对象的类型判断 最近在翻看JohnResig的大作《ProJavaScriptTechniques》,里面讲到了如何做javascript的类型判断的问题。文中介绍了两种方式,一种是使用typeof,另一种是使用co

JavaScript中判断对象类型的几种方法总结 我们知道,JavaScript中检测对象类型的运算符有:typeof、instanceof,还有对象的constructor属性:1)typeof运算符typeof是一元运算符,返回结果是一个说明运算

标签: js内存条

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

上一篇:setTimeout和setInterval的深入理解(settimeout和setinterval在安卓机无效)

下一篇:解析js中获得父窗口链接getParent方法以及各种打开窗口的方法(js获取父级元素)

  • 所得税汇算清缴报告在哪查
  • 增值税专用发票有效期是多长时间
  • 购买二手车是否适用消费者权益保护法
  • 建筑业增值税税负预警
  • 固定资产减少如何处理
  • 理事单位和事业单位的区别
  • 劳务公司交企业所得税吗
  • 企业变更股东需要本人到场吗
  • 分公司小规模
  • 幼儿园属于小型幼儿吗
  • 债券折价发行的会计分录
  • 支付给个人的佣金怎么做账务处理
  • 房屋过户收费标准
  • 月末计提账务处理
  • 交了定金签了合同
  • 原材料当废品卖怎么处理
  • 退款扣除的手续费怎么查
  • 开出产品折扣的发票怎么入账?
  • 员工预借差旅费属于什么科目
  • 水利建设基金的计税依据及税率
  • 高速公路通行费发票怎么开
  • 设备租赁涉及税种
  • 一般纳税人以清包工方式
  • 固定资产提前报废
  • 增值税专用发票怎么开
  • 积分兑换的话费在使用后不再累计消费积分是什么意思
  • 企业所得税法的规定可在税前扣除的
  • win11如何关闭开机自启动项
  • 销售出库未开票怎么入账
  • 民非组织可以接受捐赠吗
  • 向股东借款会计科目
  • win10纯净版下载联想驱动
  • 苹果手机连接电脑
  • 增值税发票红冲后税款怎么办
  • win10商店发生了错误请稍后再试
  • 玩游戏的显示器要高刷还是高分辨率
  • 微信php开发教程
  • 其他业务收入跨年调整
  • 卷曲的蕨菜叶怎么吃
  • 大脊山,英格兰峰区国家公园 (© John Finney Photography/Moment/Getty Images)
  • 企业固定资产账户2019年6月初借方余额5000000元
  • thinkphp框架怎么用
  • yum安装php5
  • vue常用
  • 阿里规则官方头条
  • 没有发票的费用汇算清缴的时候怎么调出来
  • 普票与专票的区别在哪?它各自的特点?
  • 会计在建工程属于什么科目
  • 发票作废是什么样的
  • 兼职工资比正式工的工资高还是低
  • 主营业务成本的借贷方向
  • 个人承担社保有哪些
  • 经营项目里没有纹身可以纹身吗
  • 一般销售商品收入怎么算
  • 土地使用税如何计算缴纳
  • 固定资产的运输费和包装费计入
  • 员工拿发票报销怎么做账
  • 三代个税返还算什么费用
  • MS-SQL Server 2005 其中三个版本的比较
  • centos 安装chia
  • 微软为什么放弃win10
  • hipo.dll是什么
  • url是什么格式的文件怎么打开
  • avsched32.exe是什么进程 avsched32进程有什么作用
  • 怎么设置永久禁止下载拼多多
  • win10家庭版系统怎么样
  • linux简明教程
  • [视频大小超过限制,无法查看]怎么打开
  • 批处理常用命令
  • vue miniui
  • jquery删除所有class
  • python 上传文件到ftp
  • js表单事件有哪些
  • typescript concat
  • 用python简单代码
  • 举例说明json数据格式的语法
  • 建行信用卡怎么提额
  • 南京政务服务中心
  • 我国国家宪法日是每年的十二月几日
  • 开展志愿服务关爱活动
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设