V8是一個由Google開發的開源JavaScript引擎,用於Google Chrome及Chromium中,項目以V8发动机其命名。此項目由Lars Bak主導開發。
運作方式
V8在執行之前將JavaScript編譯成了機器碼,而非位元組碼或是解释执行它,以此提升效能。更進一步,使用了如內聯緩存(inline caching)等方法來提高性能。有了這些功能,JavaScript程序與V8引擎的速度媲美二進制編譯。
传统的Javascript是动态语言,又可稱之為Prototype-based Language,JavaScript繼承方法是使用prototype,透過指定prototype屬性,便可以指定要繼承的目標。属性可以在运行时添加到或从对象中删除,引擎會为執行中的物件建立一個属性字典,新的属性都要透過字典查找属性在内存中的位置。V8為object新增属性的时候,就以上次的hidden class为父类別,创建新属性的hidden class的子类別,如此一來属性访问不再需要动态字典查找了。
為了缩短由垃圾回收造成的停顿,V8使用stop-the-world, generational, accurate的垃圾回收器。在执行回收之时会暫時中断程序的执行,而且只处理物件堆疊。還會收集內存內所有物件的指標,可以避免内存溢位的情况。V8組譯器是基於Strongtalk組譯器。
参考文献
外部連結
- [http://code.google.com/p/v8/ Google Code project page]
- [http://code.google.com/p/cproxyv8/ cproxyv8] 及[http://code.google.com/p/v8-juice/ v8-juice] are C++ libraries for extending v8, e.g. to assist in binding client-side C++ classes to JavaScript.
- [http://code.google.com/p/v8cgi/ v8cgi] is a v8-based framework for serving web application written in JavaScript.
- [http://nodejs.org/ node.js][http://simonwillison.net/2009/Nov/23/node/] is a toolkit for writing performant non-blocking event-driven network servers in JavaScript.
- [http://channel9.msdn.com/shows/Going+Deep/Expert-to-Expert-Erik-Meijer-and-Lars-Bak-Inside-V8-A-Javascript-Virtual-Machine/ Inside V8 - A Javascript Virtual Machine]
參見
- Google Chrome
- Chromium (浏览器)
- JavaScriptCore
- Dart
- SpiderMonkey
- 即时编译
评论 (0)