V8 (JavaScript引擎)
開發者 | |
---|---|
首次發布 | 2008年9月2日 |
當前版本 | 11.4[1][2](2023年5月24日,16個月前) |
源代碼庫 | |
編程語言 | C++ |
操作系統 | Microsoft Windows、Mac OS X、Linux、FreeBSD、Android、webOS |
類型 | JavaScript引擎 |
許可協議 | BSD許可證 |
網站 | v8 |
V8是一個由Google開發的開源JavaScript引擎,用於Google Chrome及Chromium中[3],項目以V8發動機其命名[4]。此項目由Lars Bak主導開發[5]。
運作方式
V8在執行之前將JavaScript編譯成了機器碼,而非位元組碼或是解釋執行它,以此提升效能。更進一步,使用了如內聯緩存(inline caching)等方法來提高性能。有了這些功能,JavaScript程序與V8引擎的速度媲美二進制編譯。[6]
傳統的Javascript是動態語言,又可稱之為Prototype-based Language,JavaScript繼承方法是使用prototype,透過指定prototype屬性,便可以指定要繼承的目標。屬性可以在運行時添加到或從對象中刪除,引擎會為執行中的物件建立一個屬性字典,新的屬性都要透過字典查找屬性在內存中的位置。V8為object新增屬性的時候,就以上次的hidden class為父類別,創建新屬性的hidden class的子類別,如此一來屬性訪問不再需要動態字典查找了。
為了縮短由垃圾回收造成的停頓,V8使用stop-the-world, generational, accurate的垃圾回收器[7]。在執行回收之時會暫時中斷程序的執行,而且只處理物件堆疊。還會收集內存內所有物件的指標,可以避免內存溢位的情況。V8組譯器是基於Strongtalk組譯器[8]。
程序執行 |
---|
基礎概念 |
代碼類型 |
編譯策略 |
|
知名運行環境 |
著名編譯器及工具鏈 |
參考文獻
- ^ 1.0 1.1 Chrome Platform Status. [2023年6月29日].
- ^ 2.0 2.1 Discontinuing release blog posts. 2022年6月17日 [2023年6月19日].
- ^ Philipp Lenssen. Google on Google Chrome - comic book. Google Blogoscoped. 2008-09-01 [2008-09-01]. (原始內容存檔於2015-06-18).
- ^ Bynens, Mathias. Celebrating 10 years of V8. September 11, 2018 [2019-05-21]. (原始內容存檔於2022-05-06).
- ^ Minto, Rob. The genius behind Google's web browser. Financial Times. 27 March 2009 [1 June 2021]. (原始內容存檔於1 December 2011).
- ^ Seeley, Rich; Jack Vaughan. Google Chrome shifts architects' equations as V8 powers the browser. SOA News. 5 September 2008 [2008-09-07]. (原始內容存檔於2010-04-27).
- ^ V8 JavaScript Engine: Introduction. Google Code. Google. [17 August 2010]. (原始內容存檔於2010年6月6日).
- ^ v8 Licenses. [2010-03-17]. (原始內容存檔於2015-11-27).
外部連結
- Google Code project page (頁面存檔備份,存於網際網路檔案館)
- cproxyv8 (頁面存檔備份,存於網際網路檔案館)及v8-juice (頁面存檔備份,存於網際網路檔案館) are C++ libraries for extending v8, e.g. to assist in binding client-side C++ classes to JavaScript.
- v8cgi (頁面存檔備份,存於網際網路檔案館) is a v8-based framework for serving web application written in JavaScript.
- node.js(頁面存檔備份,存於網際網路檔案館)[1](頁面存檔備份,存於網際網路檔案館) is a toolkit for writing performant non-blocking event-driven network servers in JavaScript.
- Inside V8 - A Javascript Virtual Machine (頁面存檔備份,存於網際網路檔案館)