可达对象
可以访问到的对象就是可达对象(引用、作用域链)可达的标准就是从根*(全局对象,即全局执行上下文)*出发是否能够被找到 function objGroup(obj1, obj2) { obj1.next = obj2 obj2.prev = obj1 return { o1: obj1, o2: obj2 } } let obj = objGroup({name: 'obj1'}, {name: 'obj2'}) console.log(obj)上面这段代码里的每个对象都可以通过路径访问到,那么所有的元素都是可达对象,如果路径被破坏了,不可达对象就会变成垃圾
**GC里的垃圾定义:**程序中不再需要使用的对象和程序中不能再访问到的对象
GC算法是什么
GC是一种机制,垃圾回收器完成具体的工作 工作的内容就是查找垃圾释放空间、回收空间 算法就是工作时查找和回收所遵循的规则
**核心思想:**设置引用数,判断当前引用数是否为0,是的话GC算法就开始工作,清除当前的垃圾占用的空间 优点
发现垃圾时立即回收最大程度减少程序暂停 缺点无法回收循环引用的对象时间开销大,资源消耗大**核心思想:**分为标记和清除两个阶段完成,标记阶段遍历所有对象找标记活动对象,清除阶段遍历所有对象清除没有标记的对象,最后GC开始工作回收相应的空间 优点
可以解决循环引用无法回收的问题 缺点会导致空间碎片化,即地址不连续,浪费空间不会立即回收垃圾对象**核心思想:**分为标记和清除两个阶段完成,标记阶段遍历所有对象找标记活动对象,清除阶段会先执行整理,移动对象位置 优点
可以减少碎片化空间 缺点不会立即回收垃圾对象V8是一款主流的JavaScript执行引擎,采用即时编译, 64位系统的最大内存为1.5G,32位为800M V8垃圾回收策略
采用分代回收的思想内存分为新生代、老生代针对不同对象采用不同算法 V8内存分配V8内存空间一分为二小空间用于存储新生代对象(32M | 16M)新生代指的是存活时间较短的对象,比如局部作用域里的变量,方法调用完毕就回收shift+esc打开浏览器任务管理器,其中的内存指dom占据的内存(频繁操作dom时会增加),js内存表示js的堆,括号中表示js的可达对象正在使用的内存(创建新对象和已有对象变大时会增加)