魔方网站建设,浙江省住建厅网站,网站模版怎样使用,安徽搜索引擎优化seo2019独角兽企业重金招聘Python工程师标准 要点记录#xff1a; 1、网页js、命令行工具#xff0c;快进快出的#xff0c;即时内存泄露#xff0c;无内存管理必要! 2、服务器端nodejs和其他正规语言一样存在内存泄露。 3、nodejs基于谷歌v8js引擎#xff… 2019独角兽企业重金招聘Python工程师标准 要点记录 1、网页js、命令行工具快进快出的即时内存泄露无内存管理必要! 2、服务器端nodejs和其他正规语言一样存在内存泄露。 3、nodejs基于谷歌v8js引擎速度很快垃圾回收也是由v8维护的 4、通过查看源码可发现v8中用js使用内存的限制约为64位-1.4G 32位 -0.7G。这是源于v8的垃圾回收机制的限制可在node 后加 --max-old|new-space-sizexxx来改变内存限制 5、nodejs进程的内存占用堆内内存堆外内存rssswapfs 其中v8申请和分配的为堆内内存所有js实体都是通过堆来分配的。process.memoryUsage() 可查看常驻内存rssheapTotal总堆内存和已分配的堆内存heapUsed 非V8分配的内存为堆外内存如 Buffer对象占据的内存用在网络流和文件流中 os.totalmem os.freemem 可查看系统的总内存和可用 内存 6、v8的垃圾回收算法 统计学知识的应用按对象存活时间将内存的垃圾回收进行不同的分代对这些不同的分代分别实施不同的回收算法 v8中将内存主分为新生代 和 老生代 空间前者存活时间短后者较长或常驻 7、新生代中活对象较少采用scavenge-cheney算法将新生代一分为二From -To ,新对象分配在from中回收时将From中活的对象从From复制到To释放From然后From和To互换角色。 8、一个对象从From复制到To时如果ta之前经历过一次scavenge复制或者to空间已经使用了25%了则该对象会直接晋升到老生代空间中接受其他回收算法 9、老生代活对象较多采用mark-sweep和mark-compact相结合的方法m-s不再划分内存空间标记阶段标记所有活的对象清理阶段清除释放所有未标记(死了的)对象这一步会产生内存空间碎片因此出现了m-c,边标记边将活动的对象往内存空间的一端 移动清理时直接清理活死对象边界死的那端。移动对象是耗时的所以主要使用 m-s算法当不足以分配空间给从新生代晋升来的对象时才使用m-c回收。 10、全停顿---每次垃圾回收时都会暂停应用逻辑是为了避免应用逻辑和回收器看到的对象不一致。 11、增量动作v8的分代垃圾回收中分为full和part方式part只回收新生代的因为新生代空间小啊全停顿影响不大但是full回收会回收老生代的全停顿的时间就不能接受了于是就有了 增量式标记incremental marking。即将标记工作分步每步和应用逻辑交替执行这样最大停顿时间减少很多(六分之一) 其他阶段就有延迟清理增量式整理compact利用多核来并行标记和清理 12、查看垃圾回收动作日志启动node时 加 --trace_gc 参数 --prof参数可得到v8执行性能参数用*-tick-processor查看 13、无法立即回收的内存有全局变量和闭包尽量使用变量赋值为null|undefined来触发回收 14、内存泄露该回收的对象出现意外没有被回收来自于:缓存队列消费不及时作用域未释放 15、慎用内存当缓存非用的话控制好缓存的大小和过期时间方式出现永远无法释放的问题采用redismemX 16、数组、回调生产者的速度比消费者速度快堆积了大量生产者导致无法释放作用域或变量 队列监控异步调用应包含超时处理机制 17、内存泄露排查网上搜索node应用内存查看分析工具 node-headdump node-memwatch 18、大文件处理使用stream模块 转载于:https://my.oschina.net/jingxing05/blog/270248