新生代内存空间
存放一些新产生的变量,里面的变量都比较小,存在时间短
当新生代内存空间要回收了,将一些活着的变量放到to空间里面,from里面的全部销毁,然后to、from对调,依次循环
老生代内存空间
垃圾回收算法
新生代简单的说就是复制 牺牲空间换时间
老生代就是标记删除整理
黑色的为标记要删除的变量,当删除后剩下的有很多空间,就需要进行整理。把剩下的整理到一起
为什么要整理呢?
比如数组是连续空间变量
arr = [1,2,3,4]
它需要 1000,1001,1002,1003这样四个连续的空位去放它, 就像网吧四连坐
如果不整理,比如1001没有空位,那么这个数组就无法放入老生代空间
新生代如何晋升到老生代
闭包会不会在内存中消失看使用情况
如果只是闭包那么用完会消失,如果闭包还进行了引用,那么它不会消失
闭包引用的变量会让内存不回收这些变量,只存在IE5时代的问题,
-
优化内存
-
尽量不要定义全局变量
-
全局变量记得销毁
-
用匿名自执行函数变全局为局部
-
尽量避免闭包的引用
闭包的引用
function a(){
let size = 20 *1024 *1024;
let arr1 = new Array(size);
return arr1
}
let b = a();
let c = b();
let d = c();
let f = d();
.
.
.
像上面这样的操作,当引用越来越多之后,变量没有回收,v8引擎就会挂掉。所以一定要尽量避免闭包的引用