1. 在chrome中GC模式是什么样子的
chorme是基于v8引擎的。是使用自动垃圾回收, es的标准里没有暴露api去控制内存。
浏览器的内存大约1G, 为什么这么小, 因为全量的垃圾回收需要1s,即使是增量的也要50ms, 垃圾回收进程和逻辑处理进程不能并发, 这1s会造成页面卡死。
浏览器内存将按照分代回收策略, 不同代采用不同的算法。 对于经常需要会回收的, 放在新生代,定期回收的, 放在老生代。
所谓回收是对内存堆(heap)进行回收, 包括新生代内存区, 老生代数据区。老生代指针区和大数据区等。
在新生代区,将采用复制算法, 将内存区一分为二, from和to, 将对象从frm放到to, 在其中死区的数据(没有引用到的)将会被回收,在这一切结束后, to, from置换。有些存在久的对象被晋升在老生代区。这个算法的弊端, 是内存不连续,有碎片。
在老生代区, 定期逐个扫描, 如果是死区数据或者指针 将被回收。
2. 如何避免内存泄漏
1)缓存会导致内存泄漏, 可以使用redis等
2)一些闭包的情况, 作用域。避免使用闭包, 可以使用尾调用优化
3)定时器要消除, 在程序结束时。
4) 值置空
3. 什么是AST, AST能做什么
IDE
的错误提示、代码格式化、代码高亮、代码自动补全等JSLint
、JSHint
对代码错误或风格的检查等webpack
、rollup
进行代码打包等CoffeeScript
、TypeScript
、JSX
等转化为原生Javascript