内存不足,所有保留的内存都由noscript_shared_function_infos保留

时间:2019-07-19 13:28:13

标签: 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(并且越来越大,越来越大),或者更糟糕的是,我的实际功能没有得到清理(不再使用时)。

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

1 个答案:

答案 0 :(得分:1)

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

我有同样的问题,但在新上下文中使用Script :: Run。好像每次使用具有function ...() {}的脚本调用时,它都会向noscript_shared_function_infos WeakRef Array附加一些字节,然后再从不对其进行清理。

我在不同的平台(例如that)上只发现了一些问题,而对v8熟悉的人的回答为零。真伤心。