除了两个变量(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相关的任何内存泄漏。
答案 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));
}
在接受答案之前,我会等待评论以及任何人可能发现的任何问题。
感谢所有有助于进一步调试和解决的问题的评论。