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

标签 c++ memory v8 embedded-v8

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

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/

相关文章:

c++ - 提高远离相机的深度缓冲精度

c++ - 在 C++ 中强制执行内存对齐

swift AVFoundation 提出了音频内存问题

javascript - setTimeout 有限制吗?

javascript - chrome 主机环境是否使用全局构造函数实例化全局对象,例如对象、函数

c++ - 从数据文件初始化静态常量成员

c++ - 使用 boost::archive 和 boost::iostreams 来压缩数据

objective-c - EXC_BAD_ACCESS 消息发送到已释放的实例,但我使用的是 ARC?

c - 在c中退出作用域时防止内存重用

javascript - 能否动态地将匿名方法(函数)变成命名方法?