javascript代码实例教程-深入浅出NodeJS――内存控制

发布时间:2019-01-28 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了javascript代码实例教程-深入浅出NodeJS――内存控制脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
小宝典致力于为广大程序猿(媛)提供高品质的代码服务,请大家多多光顾小站,小宝典在此谢过。

基于无阻塞、事件驱动建立的Node服务,具有内存消耗低的优点,非常适合处理海量的网络请求。@H_360_1@

V8的垃圾回收机制与内存限制

Javascript和Java类似,由垃圾回收机制来进行自动内存管理,而Node是构建在V8虚拟机基础上,所以其内存回收和V8运行机制息息相关。

V8的内存限制:64位系统约为1.4GB、32位系统约为0.7GB

PRocess.memoryusage(),返回值包括heaptotal代表已申请到的堆内存,heapUsed当前使用的内存,rss(resident set size)进程的常驻内存。

V8的垃圾回收机制

V8采用基于分代式垃圾回收机制,堆内存结构如下所示,分为新生代和老生代,通过参数可以设置相应大小,但是一旦设置不能根据使用情况自动扩充。

javascript代码实例教程-深入浅出NodeJS――内存控制

JavaScript中作用域分为:函数作用域、wITh作用域、全局作用域

标示符查找会先从当前作用域,若没有找到将会向上级的作用域里查找

查看进程内存使用情况:process.memoryUsage()

查看系统内存占用:os.totalmem()和os.freemem(),系统总内存和闲置内存,以字节为单位

堆外内存:Buffer等

内存泄露

内存泄露的实质是应当回收的对象出现意外而没有被回收,变成了常驻在老生代中的对象。

通常造成内存泄露原因包括

(1) 缓存

Javascript对象本身就是key-value形式,可以用作缓存,但由于缺乏高效淘汰机制存在较多缺陷和问题。

由于模块的缓存机制,模块是常驻老生代的,在模块设计时,十分小心内存泄露。

解决方案:进程外的缓存,进程自身不存储状态,如redis、memcached

(2) 队列消费不及时

(3) 作用域未释放

内存泄露排除工具

node-heapdump

node-memwatch

大内存使用

Node中提供stream模块用于处理大文件,分为可读和可写两种,Node中大部分模块都具有stream的应用如:

fs.createReadStream()、fs.createWritestream(),可以避免由于V8内存限制不能通过fs.reaDFile()或fs.writeFile()操作大文件。



觉得可用,就经常来吧! 脚本宝典 欢迎评论哦! js脚本,巧夺天工,精雕玉琢。小宝典献丑了!

脚本宝典总结

以上是脚本宝典为你收集整理的javascript代码实例教程-深入浅出NodeJS――内存控制全部内容,希望文章能够帮你解决javascript代码实例教程-深入浅出NodeJS――内存控制所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。