日期:2014-05-16  浏览次数:20388 次

Google JavaScript 引擎:V8

V8 ?是Google一个开源JavaScript 引擎,它在设计之初就以高效地执行大型的JavaScript 应用程序为目的。V8的JavaScript渲染引擎亮点在于更快速更强壮的JavaScript解析。V8是一个非常反传统的JavaScript引擎,它能够在后台动态的对JS的对象进行分类——一个在其他高级语言中很常见但JS本身不支持的特性。V8对JS的解析不是基于反复loop源代码进行解释而是直接将JS代码编译成机器码运行。换句话说,V8引擎实际上可以看做是JS的扩展和编译器——而传统上类似于JS的解释型语言恰恰是不需要编译器的。

?

????? 传统的javascript是动态语言, 又可称之为 Prototype-based Language,JavaScript继承方法是使用prototype, 透过指定prototype属性,便可以指定要继承的目标。属性可以在运行时添加到或从对象中删除,引擎会为执行中的物件建立一个属性字典,新的属性都要透过字典查找属性在内存中的位置。V8为object新增属性的时候,就以上次的hidden class为父类别,创建新属性的hidden class的子类别,如此一来属性访问不再需要动态字典查找了。

?

????? 最后,高级语言的内存管理效能一直是决定其运行效率的重要因素,而当前的JS虚拟机在这方面做的比较基本,对内存的回收也非常保守。V8使用的是非常强势的内存管理策略,一切在运行堆栈里无用的数据都会被强行回收,从而可以大大提高JS代码的运行效率。

?

?

?

V8的优势特点总结:

?

  1. 快速对象属性访问。其特点是将JS对对象属性的访问,从一个动态的查找过程转换成类似于Java/C++的静态访问。毫无疑问,在JavaScript中,对象属性访问是最为频繁的一类操作,这个动态查找的过程其实是相当之消耗时间的。

?

  2. 动态机器码生成。这个也是与快速属性访问相关的。它把动态的JS对象转变为一个类似于Java的静态布局对象。

?

  3. 高效的GC机制。V8提供的是一个stop-the-world, generational, accurate的GC机制。而FF提供的则不是一个分代的GC。在实际应用中,分代的GC相比不分代的GC显然具有更高的效率。这一点,也是Java Hotspot所必须的。

?

???? 目前,V8的源代码也推送到Github.com上:https://github.com/v8/v8

?

?