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)存分為兩部分, 分別為新生代和老生代, 兩部分的垃圾回收算法不同。
- 新生代的垃圾回收 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ì)換 - 老生代的垃圾回收
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é)合使用的。 - 增量標(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/