nodejs的内存管理,垃圾回收机制
3 月,跳不动了?>>> 要点记录: 1、网页js、命令行工具, 快进快出的,即时内存泄露,无内存管理必要! 2、服务器端nodejs和其他正规语言一样存在内存泄露。 3、nodejs基于谷歌v8js引擎,速度很快,垃圾回收也是由v8维护的 4、通过查看源码可发现v8中用js使用内存的限制约为:64位-1.4G 32位 -0.7G。这是源于v8的垃圾回收机制的限制,可在node 后加 --max-old|new-space-size=xxx来改变内存限制 5、nodejs进程的内存占用:堆内内存+堆外内存=rss+swap+fs, 其中 v8申请和分配的为堆内内存,所有js实体都是通过堆来分配的。 process.memoryUsage() 可查看常驻内存rss,heapTotal总堆 内存,和已分配的堆内存heapUsed 非V8分配的内存为堆外内存,如 Buffer对象占据的内存,用在网络流和文件流中 os.totalmem os.freemem 可查看系统的总内存和可用 内存 6、v8的垃圾回收算法 统计学知识的应用,按对象存活时间将内存的垃圾回收进行不同的分代,对这些不同的分代分别实施不同的回收算法 v8中将内存主分为新生代 和 老生代 空间,前者存活时间短,后者较长或常驻 7、新生代中活对象较少,采用scavenge-cheney算法:将新生代一分为二,From ->To