V8 是一个全新的Google 的开源 JavaScript 引擎,它在设计之初就以高效地执行大型的 JavaScript 应用程序为目的。在一些性能测试中,V8 比 Internet Explorer 的 JScript 、Firefox (IE 9使用JS引擎为:Chakra引擎)中的 SpiderMonkey (火狐4.0后用的JS引擎为JaegerMonkey)以及 Safari 中的 JavaScriptCore 要快上数倍。
V8 采用 C++ 编写,可在谷歌浏览器(来自 Google 的开源浏览器)中使用。
V8 根据 ECMA-262 第三版中的说明使用 ECMAScript,并在使用 IA-32 或 ARM 处理器的 Windows XP 和 Vista、Mac OS X 10.5 (Leopard) 以及 Linux 系统中运行。
V8 可以独立运行,也可以嵌入任何 C++ 应用程序中。
V8性能的3个关键方面:
- 快速属性访问
- 动态生成机器码
- 高效的垃圾回收
快速属性访问
JavaScript 是一门动态语言,属性可以在运行时添加到或从对象中删除。这意味着对象的属性经常会发生变化。大部分 JavaScript 引擎都使用一个类似于字典的数据结构来存储对象的属性,这样每次访问对象的属性都需要进行一次动态的字典查找来获取属性在内存中的位置。这种实现方式让 JavaScript 中属性的访问比诸如 Java 和 Smalltalk 这样的语言中的成员变量的访问慢了许多。成员变量在内存中的位置离对象的地址的距离是固定的,这个偏移量由编译器在编译的时候根据对象的类的定义决定下来。因此对成员变量的访问只是一个简单的内存读取或写入的操作,通常只需要一条指令即可。
为了减少 JavaScript 中访问属性所花的时间,V8 采用了和动态查找完全不同的技术来实现属性的访问:动态地为对象创建隐藏类。这并不是什么新的想法,基于原型的编程语言 Self 就用 map 来实现了类似的功能。在 V8 里,当一个新的属性被添加到对象中时,对象所对应的隐藏类会随之改变。
动态机器码生成
V8 在第一次执行 JavaScript 代码的时候会将其直接编译为本地机器码,而不是使用中间字节码的形式,因此也没有解释器的存在。属性访问由内联缓存代码来完成,这些代码通常会在运行时由 V8 修改为合适的机器指令。
高效的垃圾收集
V8 会自动回收不再被对象使用的内存,这个过程通常被称为“垃圾收集(Garbage Collection)”。为了保证快速的对象分配和缩短由垃圾收集造成的停顿,并杜绝内存碎片,V8 使用了一个 stop-the-world, generational, accurate 的垃圾收集器,换句话说,V8 的垃圾收集器:
- 在执行垃圾回收的时候会中断程序的执行。
- 大部分情况下,每个垃圾收集周期只处理整个对象堆的一部分,这让程序中断造成的影响得以减轻。
- 总是知道内存中所有的对象和指针所在的位置,这避免了非 accurate 的垃圾收集器中普遍存在的由于错误地把对象当作指针而造成的内存溢出的情况。
本文部分内容摘自Free Mind博客,更多关于V8引擎介绍,可以访问 http://blog.pluskid.org/?p=186
相关推荐
Chrome V8 JavaScript解析器引擎源代码(V8 JavaScript Engine)
最新版Google V8引擎库,谷歌Chrome JavaScript引擎,VS2013 32位编译,可正式使用
Google chrome内置Javascript引擎,最新版本。在tools\visual_studio下有Visual studio 2005工程文件,可以用vs2005打开。
V8 is Google's open source JavaScript engine. V8 is written in C++ and is used in Google Chrome, the open source browser from Google. V8 implements ECMAScript as specified in ECMA-262, 3rd edition, ...
Chrome V8引擎中的JavaScript数组实现分析与性能优化
c# 、asp.net 在后台使用谷歌V8引擎执行js,将示例工程中的GoogleV8Engine.cs文件复制到你的项目中。将GoogleV8Engine_x64.dll 和 GoogleV8Engine_x86.dll 两个非托管DLL文件拷贝到工程部署的DLL目录下(ASP.Net拷贝...
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时环境,可以用于开发服务器端应用程序。Node.js 具有非阻塞、事件驱动的特性,使得它非常适合处理 I/O 密集型的应用,如网络应用和实时通讯应用等。 以下是...
javascript v8执行引擎源码,v8是google chrome浏览器的javascript执行引擎,也是世界上最快的javascript执行引擎;
Chrome V8 JavaScript引擎 源代码
Node.js是基于Chrome JavaScript运行时建立的一个平台,实际上它是对Google Chrome V8引擎进行了封装,它主要用于创建快速的、可扩展的网络应用。Node.js采用事件驱动和非阻塞I/O模型,使其变得轻微和高效,非常适合...
从github中下载 Chrome V8 Javascript Engine 2011-12-01: Version 3.7.12
Using V8 - Google's Chrome JavaScript Virtual Machine。
V8 最早被开发用以嵌入到 Google 的开源浏览器 Chrome 中,但是 V8 是一个可以独立的模块,完全可以嵌入您自己的应用,著名的 Node.js( 一个异步的服务器框架,可以在服务端使用 JavaScript 写出高效的网络服务器 ) ...
V8 Javascript引擎库(libv8)主 ) V8是Google的开源Javascript引擎。 V8用C ++编写,并在Google Chrome(谷歌的开源浏览器)中使用。 V8实现了ECMA-262,第5版中指定的ECMAScript。 此扩展程序要求V8 6.9(已知...
fibjs 是一个基于 Chrome V8 JavaScript 引擎构建的 JavaScript 运行时。FIBJS使用光纤交换机,同步风格和非阻塞IO模型来构建可扩展的系统。不同于 node.js,FibJS 采用 fiber 解决 v8 引擎的多路复用,并通过大量 ...
V8是一个由美国Google开发的开源JavaScript引擎,用于Google Chrome中。[2]Lars Bak是这个项目的组长。[3] V8在运行之前将JavaScript编译成了机器码,而非字节码或是解释执行 它,以此提升性能。更进一步,使用了如...
V8 JavaScript 引擎 V8 是 Google 的开源 JavaScript 引擎。 V8 实现了 ECMA-262 中指定的 ECMAScript。 V8 是用 C++ 编写的,并在 Google Chrome(Google 的开源浏览器)中使用。 V8 可以独立运行,也可以嵌入到...
V8是一个由丹麦Google开发的开源JavaScript引擎,用于Chrome浏览器中。 这个是最新版本google v8源码vc2008编译的dll,拿来和大家分享哦;
V8 Javascript引擎库(libv8)大师 (主干) V8 是 Google 的开源 Javascript 引擎。 V8 是用 C++ 编写的,并在 Google Chrome(Google 的开源浏览器)中使用。 V8 实现了 ECMA-262,第 5 版中指定的 ECMAScript。 ...
作为异步事件驱动的 JavaScript 运行时,Node.js 旨在构建可扩展的网络应用程序