JS中,带大括号的代码块中,唯有function(){}能创建作用域,这点与JAVA、C++等语言不一样。JS中的作用域只有两类:全局作用域与函数作用域。

浏览器在对代码进行解析时,会先进行变量声明和函数声明以及函数形参声明;所以就有了声明提前的说法。

JS最基础的GC方案比较简单:

  • 遍历所有可访问对象
  • 删除不可访问的对象

    和其他语言一样,javascript的GC策略也无法避免一个问题:GC时,停止响应其他操作,这是为了安全考虑。而Javascript的GC在100ms甚至以上,对一般的应用还好,但对于JS游戏,动画对连贯性要求比较高的应用,就麻烦了。这就是新引擎需要优化的点:避免GC造成的长时间停止响应。

优化:

  • 分代回收(Generation GC)

这个和Java回收策略思想是一致的。目的是通过区分“临时”与“持久”对象;多回收“临时对象”区(young generation),少回收“持久对象”区(tenured generation),减少每次需遍历的对象,从而减少每次GC的耗时。

  • 增量GC

这个方案的思想很简单,就是“每次处理一点,下次再处理一点,如此类推”。

JS垃圾回收GC博客
JS垃圾回收GC博客2
JS垃圾回收GC博客2