V8 (JavaScript引擎)

From Wikipedia, the free encyclopedia

Remove ads

V8係一個由Google開發嘅開源JavaScript引擎,用喺Google Chrome同埋Chromium入面[1]Lars Bak係呢個項目嘅組長,用咗V8發動機嘅名做其佢嘅名[2]

Quick Facts 開發者, 初始版本 ...

運作方法

V8喺執行之前將JavaScript編譯咗做機器碼,而唔係位元組碼或者解釋執行佢,咁樣做可以提升效能。更進一步,用好似內聯緩存(inline caching)等方法嚟提高性能。有咗呢啲功能,JavaScript程式同V8引擎嘅速度同二進制編譯差唔多。 [3]

傳統嘅Javascript係動態語言,又可以叫做Prototype-based Language,JavaScript繼承方法係用prototype,透過指定嘅prototype屬性,就可以指定要繼承嘅目標。屬性可以喺運行嗰陣添加到或喺對像入面刪除,引擎會為執行緊嘅物件建立一個屬性字典,新嘅屬性都要喺字典度搵屬性係內存入面嘅位置。V8為object新增屬性嘅時候,就用上次嘅hidden class做父類別,整新屬性嘅hidden class嘅子類別,咁樣嘅話屬性訪問就唔洗喺動態字典入面搵。

為咗縮短由垃圾回收造成嘅停頓,V8用stop-the-world,、generational、accurate嘅垃圾回收器[4]。喺執行回收嗰陣會暫時停止程式,而且淨係處理物件堆疊。仲會收集RAM入面所有物件嘅指標,可以避免RAM爆煲嘅情況。V8組譯器係基於Strongtalk組譯器[5]

Remove ads

用法

V8 可以編譯做 32 位同埋 64 位版本嘅 x86ARM 或者 MIPS 指令集架構; 佢仲畀人移植咗去 PowerPC[6]IBM s390[7][8] 用喺伺服器。[9][10]

V8 可以喺瀏覽器入面用,亦都可以集成去獨立嘅項目入面。V8 用喺以下軟件:

設計

V8 先用自己嘅解析器生成 abstract syntax tree[15] 然後,Ignition 用內部 V8 字節碼格式由呢個語法樹生成 bytecode[16] TurboFan 將呢行字節碼編譯做機器碼。換句話講,V8 喺執行之前用 just-in-time 編譯ECMAScript 直接編譯做本機 machine code[17] 編譯之後嘅代碼基於代碼執行配置文件嘅啟發式,喺運行嗰陣動態咁進行額外優化(和重新優化)。使用嘅優化技術包括 inliningelision 同埋 inline cachinggarbage collectorgenerational 增量 收集器。[18]

參考

Loading content...

睇埋

Loading content...

出面網頁

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads