0%

Node.js - V8 引擎

node

先來看一下維基百科的解釋:

V8 是一個由 Google 開發的 JavaScript 引擎,並於 2008 年開源,用於 Google Chrome 及 Chromium 中。

V8 引擎是用 C++ 寫成的,最常使用的就是在 Google Chrome 與 Edge 的開發人員工具中可以直接寫 JavaScript,並直接解讀其內容,Node.js 是按照 V8 引擎的規格來做開發,將 JavaScript 透過 V8 引擎可以直接編譯成機器語言,被稱為地表最快的編譯引擎。

運作方式

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 的垃圾回收器。在執行回收之時會暫時中斷程式的執行,而且只處理物件堆疊。還會收集記憶體內所有物件的指標,可以避免記憶體溢位的情況。

參考資料