node.js之内存机制特性
Node.JS的V8引擎具有垃圾回收机制与内存限制的特性,V8的内存限制:64位系统约为1.4GB、32位系统约为0.7GB;V8采用基于分代式垃圾回收机制,堆内存结构分为新生代和老生代,新生代达到一定的条件就可以晋升为老生代。如下图所示:

图一 Node.JS堆内存结构
Node.JS能够高效利用内存,它在JavaScript中作用域分为:函数作用域、with作用域、全局作用域。标示符查找会先从当前作用域,若没有找到将会向上级的作用域里查找。查看进程内存使用情况:process.memoryUsage()。查看系统内存占用:os.totalmem()和os.freemem(),系统总内存和闲置内存,以字节为单位。堆外内存:Buffer等。
Node的内存泄露的实质是应当回收的对象出现意外而没有被回收,变成了常驻在老生代中的对象。通常造成内存泄露原因包括:
(1) 缓存缺乏高效淘汰机制
由于模块的缓存机制,模块是常驻老生代的,在模块设计时,十分小心内存泄露。
(2) 队列消费不及时
(3) 作用域未释放
内存泄露排除工具:node-heapdump,node-memwatch;
在Node.JS中提供stream模块用于处理大文件,分为可读和可写两种,Node.JS中大部分模块都具有stream的应用如:fs.createReadStream()、fs.createWriteStream(),可以避免由于V8内存限制不能通过fs.readFile()或fs.writeFile()操作大文件。
node.js之内存机制特性的更多相关文章
- 如何定位 Node.js 的内存泄漏
基础知识 Node.js 进程的内存管理,都是有 V8 自动处理的,包括内存分配和释放.那么 V8 什么时候会将内存释放呢? 在 V8 内部,会为程序中的所有变量构建一个图,来表示变量间的关联关系,当 ...
- Node.js V0.12 新特性之性能优化
v0.12悠长的开发周期(已经过去九个月了,并且还在继续,是有史以来最长的一次)让核心团队和贡献者们有充分的机会对性能做一些优化. 本文会介绍其中最值得注意的几个. http://www.infoq. ...
- Node.js V0.12新特性之性能优化
v0.12悠长的开发周期(已经过去九个月了,并且还在继续,是有史以来最长的一次)让核心团队和贡献者们有充分的机会对性能做一些优化.本文会介绍其中最值得注意的几个. 支持塞住模式的可写流 现在可写流可以 ...
- Node.js之模块机制
> 文章原创于公众号:程序猿周先森.本平台不定时更新,喜欢我的文章,欢迎关注我的微信公众号.  ,然后可以得到一个对象如下: var mem = process.memoryUsage(); console.log(mem); 结果: { ...
- node.js 的事件机制
昨天到今天, 又看了一边node 的事件模块, 觉得很神奇~ 分享一下 - -> 首先, 补充下对node 的理解: nodeJs 是一个单进程单线程应用程序, 但是通过事件和回调支持并发 ...
随机推荐
- ios处理键盘的大小
iOS的键盘有几个通知 UIKeyboardWillShowNotification UIKeyboardDidShowNotification UIKeyboardWillHideNotificat ...
- leetcode-682-Baseball Game
题目描述: You're now a baseball game point recorder. Given a list of strings, each string can be one of ...
- CSS的nth-of-type和nth-child的区别
<!--源代码--><!DOCTYPE html> <html lang="en"> <head> <meta charset ...
- 2、TensorFlow训练MNIST
装载自:http://www.tensorfly.cn/tfdoc/tutorials/mnist_beginners.html TensorFlow训练MNIST 这个教程的目标读者是对机器学习和T ...
- centos的基本命令04
零:简述linux的文档目录结构 linux的文档目录是一个树形结构,操作的时候表现为以 / 开头的树形结构,/也是系统 的最顶端,也就是linux的root,也是linux系统的文件系统的入口. 他 ...
- TCPIP详解卷一
strongswan man page. kernel-book IntroductionParallelPro then POSIX THread
- 线性代数与simplex
线性方程组: \(i:1-n\) \(j:1-m\) \({\begin{cases}a_{11}x_1+a_{12}x_2+a_{13}x_3+\cdots+a_{1n}x_n=b_1\\a_{21 ...
- 论文阅读 | FCOS: Fully Convolutional One-Stage Object Detection
论文阅读——FCOS: Fully Convolutional One-Stage Object Detection 概述 目前anchor-free大热,从DenseBoxes到CornerNet. ...
- Git命令之回退篇 git revert git reset
Git command之回退篇 欲练回退 必先了解:HEAD.index.WorkingCopy HEAD: 当前所在的分支版本顶端的别名,也就是最新的一次commit. git commit 之后与 ...
- redis中算法之——MurmurHash2算法
MurmurHash算法由Austin Appleby发明于2008年,是一种非加密hash算法,适用于基于hash查找的场景.murmurhash最新版本是MurMurHash3,支持32位,64位 ...