深入Node

本篇是深入的Node的讀書筆記,相關知識點的歸納以及自己的簡介《深入Node》

Node架構一覽

Node架構

libuv架構

libuv架構

V8架構

V8架構

現(xiàn)代JS引擎執(zhí)行: 源代碼(.js)→抽象語法樹(AST)→字節(jié)碼→JIT→本地代碼

V8直接將AST通過JIT編譯為本地代碼,并且在生成本地代碼以后采集相關信息,優(yōu)化本地代碼

Isolate

Isolate

一個 Isolate 是一個獨立的虛擬機。對應一個或多個線程。但同一時刻 只能被一個線程進入。所有的 Isolate 彼此之間是完全隔離的, 它們不能夠有任何共享的資源。如果不顯示創(chuàng)建 Isolate, 會自動創(chuàng)建一個默認的 Isolate。

堆的構成

v8的堆
  • 新生區(qū)
    大多數(shù)對象開始時被分配在這里。新生區(qū)是一個很小的區(qū)域,垃圾回收在這個區(qū)域非常頻繁,與其他區(qū)域相獨立。
  • 老生指針區(qū)
    包含大多數(shù)可能存在指向其他對象的指針的對象。大多數(shù)在新生區(qū)存活一段時間之后的對象都會被挪到這里。
  • 老生數(shù)據(jù)區(qū)
    這里存放只包含原始數(shù)據(jù)的對象(這些對象沒有指向其他對象的指針)。字符串、封箱的數(shù)字以及未封箱的雙精度數(shù)字數(shù)組,在新生區(qū)經(jīng)歷一次 Scavenge 后會被移動到這里。
  • 大對象區(qū)
    這里存放體積超過 1MB 大小的對象。每個對象有自己 mmap 產(chǎn)生的內(nèi)存。垃圾回收器從不移動大對象。
  • Code區(qū)
    代碼對象,也就是包含 JIT 之后指令的對象,會被分配到這里。
  • Cell 區(qū)、屬性 Cell 區(qū)、Map 區(qū)
    這些區(qū)域存放 Cell、屬性 Cell 和 Map,每個區(qū)域因為都是存放相同大小的元素,因此內(nèi)存結構很簡單。

模塊加載

  1. 如果模塊在緩存中,返回它的exports對象
  2. 如果是原生的模塊,通過 NativeModule.require() 返回結果
  3. 否則,創(chuàng)建一個新的模塊,并保存到緩存中

可見,被緩存命中的程序擁有最高加載權

事件循環(huán)

事件循環(huán)
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 1 Node.js模塊的實現(xiàn)# 之前在網(wǎng)上查閱了許多介紹Node.js的文章,可惜對于Node.js的模塊機制大都...
    七寸知架構閱讀 2,151評論 1 50
  • 1 Node.js模塊的實現(xiàn) 之前在網(wǎng)上查閱了許多介紹Node.js的文章,可惜對于Node.js的模塊機制大都著...
    zlx_2017閱讀 1,478評論 0 1
  • 從三月份找實習到現(xiàn)在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂視家的研發(fā)崗...
    時芥藍閱讀 42,755評論 11 349
  • 1 概述 在linux中,我們在編輯時需要對文檔編輯或者一些信息的顯示加上顏色,增強閱讀的效果 格式: echo ...
    ghbsunny閱讀 11,919評論 1 2
  • 早起?。。?:30! 并且昨晚上第一次達成早睡任務,鼓掌! EnglishPod 0002 打卡! 原來Engli...
    披著馬甲寫日記閱讀 120評論 0 0

友情鏈接更多精彩內(nèi)容