JavaScript 内存管理 并发模型与Event Loop

出处:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Memory_Management
内存生命周期
不管什么程序语言,内存生命周期基本是一致的:
**分配你所需要的内存
使用分配到的内存(读、写)
不需要时将其释放\归还
在**所有语言中第一和第二部分都很清晰。最后一步在低级语言中很清晰,但是在像JavaScript 等高级语言中,这一步是隐藏的、透明的。

JavaScript 的内存分配
值的初始化:
JavaScript在定义变量时就完成了内存分配
通过函数调用的内存分配
值的使用:
使用值的过程实际上上是对分配内存进行读 取与写入的操作。
当内存不再需要使用时释放
在这里最艰难的任务是找到“所分配的内存确实已经不再需要了”高级语言解释器嵌入了“垃圾回收器”,它的主要工作是跟踪内存的分配和使用,以便当分配的内存不再使用时,自动释放它。这是近似的过程,因为要知道是否仍然需要某块内存是无法判断的。
垃圾回收

垃圾回收算法主要依赖于引用的概念。在内存管理的环境中,一个对象如果有访问另一个对象的权限,叫做一个对象引用另一个对象。一个JavaScript对象那个具有对它原型的引用和对它属性的引用。
引用计数垃圾收集,此算法把“对象是否不再需要”简化定义为“对象有没有其他对象引用到它”。如果没有引用指向该对象(零引用),对象将被垃圾回收机制回收。

标记-清除算法
这个算法把“对象是否不再需要”简化定义为“对象是否可以获得”。从根开始,垃圾回收器将找到所有可以获得的对象和所有不能获得的对象。
这个算法比前一个要好,因为“有零引用的对象”总是不可获得,但是相反却不一定。
限制: 那些无法从根对象查询到的对象都将被清除

并发模型与Event Loop
javaScript 的并发模型基于“event Loop”
运行时概念: 理论上的模型,现代JavaScript引擎着重实现和优化了描述的几个语义。
栈 函数调用形成了一个堆栈帧。
堆 对象被分配在一个堆中,它只是一个名字来表示大部分非结构化的内存区域。
队列 javaScript 运行时包含消息队列,它是要处理的消息的列表,一个函数与每个消息相关联

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值