GC( Garbage Collection ),GC执行时,中断代码,停止其他操作。执行阶段遍历所有对象,对于不可访问的对象进行回收。该机制执行操作耗时100ms左右。V8引擎中使用两种优化方法:

  1. 分代回收;
  2. 增量GC;
  3. 目的是通过对象的使用频率、存在时长区分新生代与老生代对象。多回收新生代区(young generation),少回收老生代区(tenured generation),减少每次需遍历的对象,从而减少每次GC的耗时。
  4. 把需要长耗时的遍历、回收操作拆分运行,减少中断时间,但是会增大上下文切换开销.

回收方法
(1)引用计次
当对象被引用次数为0时,就被回收。潜在的一个问题是:循环引用时,两个对象都至少被引用了一次,将不能自动被回收。所以导致,我们常讲的内存泄露。
(2)标记清除
这是当前主流的GC算法,V8里面就是用这种。当对象,无法从根对象沿着引用遍历到,即不可达(unreachable),进行清除。对于上面的例子,fn() 里面的 a 和 b 在函数执行完毕后,就不能通过外面的上下文进行访问了,所以就可以清除了。

解释型语言(例如 JavaScript)来说, 通过词法分析 -> 语法分析 -> 语法树,就可以开始解释执行了。
语法分析成 AST (Abstract Syntax Tree)


Suzy323
20 声望0 粉丝

« 上一篇
【算法】排序
下一篇 »
【css】布局