2015-04-01 48 views
0

的内存分配当我开始一个新的和的NodeJS型process.memoryUsage(),它显示的NodeJS

> process.memoryUsage() { rss: 11296768, heapTotal: 7195904, heapUsed: 2964776 }

所以使用的NodeJS的11M内存和V8的堆使用它们的7M。

还有什么消耗剩余的11-7 = 4M内存,nodejs的C++部分? libuv? v8本身?

是否有任何方法或工具来查看内存分配?

ps:我不需要node-heap/node-memwatch来检测v8堆中的内存。他们主要测量js项目(js文件)使用的内存。我想知道节点本身使用的内存。哪些部件使用剩余的 4M,以及每个部件使用多少。

回答

1

V8每次运行垃圾收集器时都不压缩堆。这意味着两者之间可能存在未使用的空间。这里有一个非常蹩脚的图表来展示可能发生的事情。

------------------------------------------- 
|   |    |    | 
| used  | unused |  used | 
|   |    |    | 
------------------------------------------- 

所以总堆大小是分配给最后分配字节的第一个字节。 V8可能会在未来某个时候使用“未使用”的空间,但它并不需要。