当我启动一个新的nodejs并输入process.memoryUsage()时,它会显示
> 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,每个部分使用多少。
答案 0 :(得分:1)
每次垃圾收集器运行时,V8都不压缩堆。这意味着它们之间可能存在未使用的空间。这是一个非常蹩脚的图表,以显示可能发生的事情。
-------------------------------------------
| | | |
| used | unused | used |
| | | |
-------------------------------------------
因此总堆大小是分配给最后一个分配字节的第一个字节。 V8可能会在将来的某个时候使用“未使用”的空间,但它不需要。