gpt4 book ai didi

javascript - 使用 Promises 时 Typescript 中的内存泄漏

转载 作者:搜寻专家 更新时间:2023-10-30 22:06:13 25 4
gpt4 key购买 nike

在 Typescript 中有这段代码

const f = async function() {
return 1+1;
};

let memory = process.memoryUsage();
let i = 0;
while (i < 100000) {
let result = await f().then(function(res) {}).catch(function() {});
i++;
}
let memory2 = process.memoryUsage();
console.log(memory2.heapUsed - memory.heapUsed);

我进行的迭代越多,两点之间的 heapUsed 就越大。

通过适本地减少方法,并且不使用 promises 而使用简单的方法,使用的堆变得稳定并且即使我迭代 100 万次也不会改变。

const f = function() {
return 1+1;
};

let memory = process.memoryUsage();
let i = 0;
while (i < 200000) {
let r = f();
i++;
}
let memory2 = process.memoryUsage();
console.log(memory2.heapUsed - memory.heapUsed);

谁能解释一下内存泄漏到底在哪里?什么东西永远留在内存中?

最佳答案

Can anyone explain a little bit where is exactly the memory leak here

内存使用不是内存泄漏。如果内存可以被垃圾收集,那么它就不会泄漏。您的示例根本不够大,无法保证 GC 运行。

以下代码强行运行gc(不推荐!):

const f = async function () {
return 1 + 1;
};

async function main() {
let memory = process.memoryUsage();
let i = 0;
while (i < 100000) {
let result = await f().then(function(res) {}).catch(function() {});
i++;
}
console.log('before', process.memoryUsage().heapUsed - memory.heapUsed);
global.gc();
console.log('after', process.memoryUsage().heapUsed - memory.heapUsed);
}

main();

如果您运行此程序,您会注意到 之后 gc 运行内存实际上从应用程序启动时开始减少。示例运行:

enter image description here

关于javascript - 使用 Promises 时 Typescript 中的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51939989/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com