V8 內(nèi)存和垃圾回收

V8 的內(nèi)存默認(rèn)設(shè)置為:
 32 位: 0.7GB 左右
64 位: 1.4GB左右
使用 --max_old_space_size + 數(shù)字 設(shè)置老生代內(nèi)存 單位 MB
--max_new_space_size + 數(shù)字 設(shè)置新生代內(nèi)存單位 KB
多使用Buffer, Buffer 是在C++ 層面上實(shí)現(xiàn)的不會(huì)占用V8 分配的內(nèi)存 或者 使用多個(gè)Node 進(jìn)程。
V8 的垃圾回收:
V8 的內(nèi)存分為兩部分, 分別為新生代和老生代, 兩部分的垃圾回收算法不同。

  1. 新生代的垃圾回收 Scavenge 算法
    1.將新生代分為相等的兩個(gè)部分,一個(gè)處于使用狀態(tài)稱為 from 空間, 一個(gè)處于閑置狀態(tài)稱為 to 空間
    2.分配對(duì)象時(shí)使用 from 空間
    3.將 from 空間的存活對(duì)象 復(fù)制到 to空間中, 如果from 空間內(nèi)的對(duì)象經(jīng)過多次復(fù)制依然存活或者 to空間的使用率達(dá)到 25%, 將其復(fù)制到老生代空間中去。
    4.清空 from 空間, 并將from 空間 與 to空間 角色進(jìn)行對(duì)換
  2. 老生代的垃圾回收
    1.Mark - Sweep 進(jìn)行標(biāo)記清除, 即標(biāo)記活著的對(duì)象, 然后清除未標(biāo)記的對(duì)象即不使用的對(duì)象。會(huì)造成內(nèi)存不連續(xù)的狀態(tài)
    2.Mark - Compact 進(jìn)行標(biāo)記整理, 標(biāo)記活著的對(duì)象, 然后將活著的對(duì)象往一端移動(dòng),移動(dòng)完成后清理掉邊界外的內(nèi)存。耗時(shí)較長
    3.以上兩種算法是結(jié)合使用的。
  3. 增量標(biāo)記的形式
    v8 在進(jìn)行垃圾回收時(shí)會(huì)將應(yīng)用邏輯暫停下來,為了降低全堆垃圾回收時(shí)的時(shí)間, 從標(biāo)記階段開始, 將原來要進(jìn)行的步驟拆為許多步分別進(jìn)行, 每次回收一點(diǎn)垃圾內(nèi)存, 然后讓邏輯運(yùn)行, 以此類推。

參考鏈接:
http://segmentfault.com/a/1190000000440270
http://newhtml.net/category/v8%E4%B8%93%E9%A2%98/

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

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

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