js 是垃圾回收的语言,也就是执行环境负责在代码执行时管理内存。
1. 标记清理
垃圾回收程序时,会标记内存中存储的所有变量,然后会将所有在上下文中的变量,以及被在上下文中的变量引用的变量标记去掉。在此之后再被及加上标记的变量就是待删除的了。原因是在上下文中的变量都访问不到他们了。随后垃圾回收程序做一此内存清理。销毁带标记的所有值并回收他们的内存。
2. 思路是对每个值都记录它被引用的次数。如果被引用一次,那么引用数就加1。如果保存对该值引用的变量被其他值覆盖了,那么引用数减1.当一个值的引用数为0时,那么说明没有访问到这个变量,就可以回收了。(问题是循环引用会导致变量不会被回收,目前解决办法是代码将值置为0)。
IE7之后,js引擎的垃圾回收程序被调优为动态改变分配变量,字面量或者数组槽位等会触发垃圾回收的阈值。如果回收的内存不到分配的15%,那么阈值将翻倍。如果回收的内存达到了85%,那么阈值将重置为默认值。
通常无需关系内存管理。
优化:const和let声明提升性能。变量不使用时将其置为null。