![](/img/trans.png)
[英]FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory in Ionic 3
[英]JS Infinite loop : FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
执行无限循环时出现 memory 堆错误
function test() {
let pairContract;
for (let i = 0; i < 1000; i++) {
let pairContract = new web3.eth.Contract(UNISWAP_ABI, '0x2e81ec0b8b4022fac83a21b2f2b4b8f5ed744d70');
pairContract = null;
}
}
const init = () => {
do {
test();
} while (1);
};
init();
基本上新的 web3.eth.Contract 会生成一个复杂的 object。
问题似乎是在之前的 test() 执行之后,pairContract 的每个实例都不会从 memory 中完全删除。
我试图用 setInterval 替换 do while 但它不起作用。 还尝试了在测试 function 结束时使用 process.nextTick 的递归方法,但它也不起作用。
增加 --max-old-space-size 最终会得到与标题中所述相同的错误代码。
节点版本:v12.20.0
找到了答案。 似乎使用具有全局 scope 的 web3 实例来创建 pairContract 可以防止它被垃圾收集。
在测试 function 中使用const web3 = new Web3('http://localhost:8545')
创建 web3 实例解决了该问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.