v8的内存控制
2016年4月4日
v8内存限制
64位1.4G
内存空间分配
新老生代内存空间 -需启动时指定
- 新生代空间 64位 32M
- 两块reversed semispace
- 老生代空间 64位 1.4G
- 总的保留内存空间 4*reversed-semispace-size+max_old_generation_size
回收算法
新生代Scanvenge
分为from和to两个空间,每次出发Gc时,将from移往to然后将from空间清空.
新生代晋升老生代
- from中已经经历过Scanvenge将直接进入老生代
- 当to空间已经使用了25%(原因:为了后续的内存分配)
老生代Mark-sweep,Mark-compact
- 降低回收时间
- Incremental marking
- lazy sweeping
- incremental compaction
查看垃圾回收日志
node参数
- trace_gc
- prof
- v8提供linux-tick-processor工具统计结果
高效使用内存
- delete影响v8优化
- 闭包和全局对象引用会导致对象进入老生代
查看内存使用情况
内存概念:
- rss : resident set size
process:
- memoryUsage
os:
- totalmem
- freemem
内存泄露排查
- node-headdump
- node-memwatch