【发布时间】:2017-10-22 17:34:58
【问题描述】:
当除了两个变量(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 相关的任何内存泄漏。
【问题讨论】:
-
memory 这里指的是RAM,每个变量等都驻留在RAM中。但是不,您的代码不会使用太多内存,因此内存泄漏必须在其他地方
-
唯一使用的变量是 i & j。我没有看到任何占用 RAM 的东西。
-
@Kannaiyan
console.log将使用大量 ram,toFixed和parseFloat函数将使用 ram - 就像所有其他不适合寄存器的操作一样。 -
但是一旦console.log完成,它会进入控制台并且ram将被正确清除。无论如何我可以将其从进程中清除吗?我在 toFixed 和 parseFloat 下是函数,一旦函数完成,它们也应该清除内存对吗?还假设它们是同步的。我没有看到它们会异步运行。
-
是的,唯一继续获取内存的是控制台输出缓冲区,其余的应该保留在常量内存中。你真的在控制台上看到了什么吗?能跑多远?
标签: javascript node.js memory