了解
前:像java这种高级语言中都带有垃圾回收机制,而c语言这样的底层语言一般都是会有底层的内存管理接口,比如malloc()和free()。相反,JavaScript创建变量、对象、字符串等等时会自动进行内存分配,并且在不使用的时候会进行自动释放,这个释放的过程叫做垃圾回收。
内存分配的过程:分配你所需要的内存->使用分配到的内存 读,写 ->不需要的时候进行归还。底层语言第一部分和第三部分是明确的,而js中他是自动的。
垃圾的产生
创建一个基本类型、对象、函数都是需要占用内存的。而我们使用js时候是不需要关注的,他是自动分配的,不需要自己去动态分配内存。
现在举个例子
let obj = {
name :'zhangsan'
};
obj = 2;
首先我们声明了一个变量obj是个对象,接着复制为一个整型,那么之前的对象的引用关系就没有了引用关系,也就是没用用处的。如果这个时候不进行相应的处理,越来越多的‘废’数据,内存也会一直被占用,所以需要去回收。
垃圾回收策略
在 JavaScript 内存管理中有一个概念叫做 可达性,就是那些以某种方式可访问或者说可用的值,它们被保证存储在内存中,反之不可访问则需回收
至于如何回收,其实就是怎样发现这些不可达的对象(垃圾)它并给予清理的问题, JavaScript 垃圾回收机制的原理说白了也就是定期找出那些不再用到的内存(变量),然后释放其内存
转自:https://juejin.cn/post/6981588276356317214