重新要求JSON后,内存似乎无法释放

时间:2017-03-09 05:17:30

标签: javascript node.js memory garbage-collection

在我创建的循环中,我删除并重新要求一个json文件,其内容是任意5000次(在我的情况下就是这样:

{
  "hello": "trash",
  "thing": "there"
}

我在循环之前,循环结束时以及强制垃圾收集之后记录内存使用情况:

var util = require('util')
var trash = require('./trash.json')

console.log(`Original:\n${util.inspect(process.memoryUsage())}`)

for (let tries = 0; tries < 5000; tries++) {
  try {delete require.cache[require.resolve('./trash.json')]} catch (e) {}
  require('./trash.json');

  if (tries === 4999) console.log(`New:\n${util.inspect(process.memoryUsage())}`);
}

global.gc()
console.log(`After collection:\n${util.inspect(process.memoryUsage())}`)

输出结果为:

Original:
{ rss: 19767296,
  heapTotal: 7319552,
  heapUsed: 3262680,
  external: 8220 }
New:
{ rss: 32210944,
  heapTotal: 17805312,
  heapUsed: 10002312,
  external: 32796 }
After collection:
{ rss: 32989184,
  heapTotal: 26193920,
  heapUsed: 7442936,
  external: 32796 }

似乎即使垃圾收集heapUsed仍然比原始收集大得多。但是,当我删除require('./json')时,heapUsed要低得多:

Original:
{ rss: 19718144,
  heapTotal: 7319552,
  heapUsed: 3262640,
  external: 8220 }
New:
{ rss: 24309760,
  heapTotal: 10465280,
  heapUsed: 5084248,
  external: 8220 }
After collection:
{ rss: 24436736,
  heapTotal: 10465280,
  heapUsed: 3542584,
  external: 8220 }

从这一点看,如果你删除缓存并在整个Node进程的生命周期中多次重复使用它们,它最终会耗尽系统的内存并且垃圾收集可以&#不可避免。 39;不要做任何事情。

但我仍然在学习内存管理的工作原理 - 是否有可能(在多次缓存删除和重新要求之后)使用的内存恢复到接近其原始值?

即使在收集垃圾后,究竟是什么占用内存?

0 个答案:

没有答案