V8引擎如何回收
一.為什么要關(guān)注內(nèi)存
? ? 1.防止頁面占用內(nèi)存過大巡语,引起客戶端卡頓轻黑,甚至無響應(yīng)
? ? 2.Node使用的也是V8,內(nèi)存對于后端服務(wù)的性能至關(guān)重要资昧,因為服務(wù)的持久性,后端更容易造成內(nèi)存溢出
——>一般考慮大文件上傳項目
二.V8部分組成
? ? 1) V8內(nèi)存分配
? ? ? ? 1.Stack棧通常是執(zhí)行環(huán)境
? ? ? ? 2.Heap memory堆內(nèi)存負(fù)責(zé)垃圾回收機制
? ? ? ? ? ? 1.New space 新生代
? ? 嚴(yán)格分為兩個空間:Semi space From和Semi space To
? ? ? ? ? ? 2.Old space? ?舊生代?
????連續(xù)空間:Old pointer space——>指針幔烛,引用啃擦;Old data space——>原始對象
如果項目過大會存放在large object space當(dāng)中
代碼空間,即時編譯器(JIT)存放于code space JS代碼運行環(huán)境
屬性單元空間:Cell space饿悬,Property cell space令蛉,Map space
三.空間大小
? ? 1.64位操作系統(tǒng)為1464MB,32位操作系統(tǒng)為732MB
? ? 2.64位新生代64MB乡恕,老生代1400MB
? ? 3.32位新生代32MB,老生代700MB
? ? 4.最新版node.js(V14)俯萎,2GB
四.產(chǎn)品定位
? ? 1.先有JS傲宜,再有node
? ? 2.JS為了瀏覽器渲染
? ? 3.JS/Node.js存在區(qū)別異步單線程
? ? 4.Node.js(底層C++,可以通過底層代碼修改內(nèi)存空間)讀寫大文件夫啊,Webpack//Vit編譯大型項目都存在內(nèi)存空間占用1.4G
? ? 5.垃圾回收機制 運行線程——>回收1.5G內(nèi)存 50ms以上函卒,運行代碼和回收垃圾存在沖突
五.垃圾回收算法
? ? 1.新生代Scavenge算法
? ? 2.老生代標(biāo)記整理清除Mark-Sweep(標(biāo)記清除),Mark-Compact(標(biāo)記整理)? ??
? ? 3.變量存放在新生代撇眯,滿足條件會晉升
定義復(fù)雜變量object 1存放在From空間报嵌,存放變量a,b熊榛,c锚国,刪變量abc,給與變量標(biāo)記