gpt4 book ai didi

c++ - Heap out of memory,noscript_shared_function_infos持有的所有保留内存

转载 作者:行者123 更新时间:2023-11-30 04:45:43 25 4
gpt4 key购买 nike

我的应用程序创建了很多带有回调的函数,这是通过以下方式完成的:

v8::Local<v8::Function> myFunc = v8::Function::New(
i->GetCurrentContext(),
FunctionInvokerCallback(),
this->WrapDelegate(callbackInvoke),
0,
v8::ConstructorBehavior::kThrow,
v8::SideEffectType::kHasSideEffect).ToLocalChecked();

//persistentObject is a weak Global reference with a callback to clean up native resources
this->objectHandle->persistentObject->Get(i)->Set(i->GetCurrentContext(), functionName, myFunc).FromJust();

内存越来越大,最终出现OOM错误和崩溃。查看堆快照,我发现大部分保留内存由(强根)中的 noscript_shared_function_infos 持有。

我的猜测是 sharedFunctionInfos 没有被清理(并且增长、增长和增长),或者更糟糕的是我的实际功能没有被清理(当不再使用时)。

完成后如何删除信息/或实际功能?

最佳答案

您是否尝试过 while(!V8::IdleNotification()) {};noscript_shared_function_infos 不应该由 v8 的 GC 处理吗?

我有同样的问题,但 Script::Run 在新的上下文中。似乎每次调用具有 function ...() {} 的脚本时,它都会将一些字节附加到 noscript_shared_function_infos WeakRef 数组,然后永远不会清除它。

我在不同的平台上只发现了一些问题(比如 that ),而从熟悉 v8 的人那里得到的答案为零。很难过。

关于c++ - Heap out of memory,noscript_shared_function_infos持有的所有保留内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57113516/

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