我正在运行以下代码
var i = 0;
while (i != i + 1) {
console.log(++i)
}
据我了解,我只使用一个变量,因此该程序永远不会耗尽内存(不是很长时间),但是几分钟后,它将引发错误。
任何人都可以帮助我了解为什么它会以这种方式运行
答案 0 :(得分:1)
这是由于console.log调用。流的垃圾回收不会立即激活。 运行以下命令不会导致任何内存问题。当然,由于数字的大小,它最终将崩溃。但这会花费更长的时间。
var i = 0;
while (i != i + 1) {
i++;
}
有关使用console.log进行内存管理的更多信息:https://github.com/nodejs/help/issues/1339
答案 1 :(得分:1)
控制台的内容肯定保存在某个地方,并且随着代码的增长一直在增长。无限长的(*)文本不适合存储,仅此而已。
此外,console.log()
可能会分配多个字符串并为每个调用点燃一个正则表达式引擎。垃圾收集可能跟不上这个。在JavaScript方面,它已经不是一个简单的功能:https://github.com/nodejs/node/blob/master/lib/internal/console/constructor.js#L214
Console.prototype[kWriteToConsole] = function(streamSymbol, string) { [...] if (groupIndent.length !== 0) { if (string.includes('\n')) { string = string.replace(/\n/g, `\n${groupIndent}`); } string = groupIndent + string; } string += '\n'; if (ignoreErrors === false) return stream.write(string); // and a similar one with extra steps for catching errors [...] };
在流方面和本机部分也可能有额外的步骤。