node v6.11.0当程序中没有使用内存时,JavaScript堆内存不足

时间:2017-10-22 17:34:58

标签: javascript node.js memory

除了两个变量(i& j)之外,当没有使用内存存储时,会出现内存错误。有人可以澄清一下。

我不是存储在内存中的任何位置或将其写入任何存储器,生成的任何内容都会向控制台发送内容并需要转移到下一条指令。

console.log('num,num2,op,result');
for(i=9.0;i>=0;) {
  for(j=9.0;j>=0;) {
     console.log(i.toFixed(3) + ',' + j.toFixed(3) + ',+,'  + (i+j).toFixed(3));
     j =parseFloat((j - 0.001).toFixed(3));
  }
     i =parseFloat((i - 0.001).toFixed(3));
 }

执行此获取堆栈错误,

致命错误:CALL_AND_RETRY_LAST分配失败 - JavaScript堆内存不足

 1: node::Abort() [/usr/local/bin/node]
 2: node::FatalException(v8::Isolate*, v8::Local<v8::Value>, v8::Local<v8::Message>) [/usr/local/bin/node]
 3: v8::internal::V8::FatalProcessOutOfMemory(char const*, bool) [/usr/local/bin/node]
 4: v8::internal::Factory::NewFillerObject(int, bool, v8::internal::AllocationSpace) [/usr/local/bin/node]
 5: v8::internal::Runtime_AllocateInTargetSpace(int, v8::internal::Object**, v8::internal::Isolate*) [/usr/local/bin/node]
 6: 0x3006473079a7
Abort trap: 6

请让我知道我缺少什么以避免内存崩溃。

更多研究

  

对于我们的代码,console.log是否有任何区别   异步与否,它不提供任何类型的回调左右;和   您传递的值始终在您使用时被引用和计算   调用函数。

参考: console.log() async or sync?

仅在引用与其相关的数据时引用数据。

还会检查与parseFloat或toFixed相关的任何内存泄漏。

1 个答案:

答案 0 :(得分:0)

console.log正在缓冲并超出内存限制。

使用缓冲区刷新将其刷新到系统控制台,它将能够无限期地继续。

以下是我如何解决它,

var logbuffer = require('log-buffer');
console.log('num,num2,op,result');
for (i = 9.0; i >= 0;) {
    for (j = 9.0; j >= 0;) {
        console.log(i.toFixed(3) + ',' + j.toFixed(3) + ',+,' + (i + j).toFixed(3));
        j = parseFloat((j - 0.001).toFixed(3));
    }
    logbuffer.flush();
    i = parseFloat((i - 0.001).toFixed(3));
}

在接受答案之前,我会等待评论以及任何人可能发现的任何问题。

感谢所有有助于进一步调试和解决的问题的评论。