首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >V8垃圾收集速度非常慢

V8垃圾收集速度非常慢
EN

Stack Overflow用户
提问于 2015-02-05 21:59:49
回答 1查看 404关注 0票数 0

我已经开发了一个实时3D引擎,现在我想切换到V8 JavaScript引擎。实现非常简单,一切都很好,除了垃圾收集有问题,它导致了一个重要的性能泄漏。由于技术原因,我需要主动垃圾收集,所以我需要收集垃圾:

v8::V8::LowMemoryNotification ();

这就是我想要的,但是非常慢。我也已经尝试过了:

V8::IdleNotification ()

但是,当垃圾收集真正执行时,它会导致长时间中断。

在实时3D应用程序中实现V8垃圾收集的最佳方式是什么?我该如何思考?那么多线程呢?

似乎很重要的一点是,3d场景可以有几十个脚本,每个脚本都在单独的独立环境中运行。

EN

回答 1

Stack Overflow用户

发布于 2015-02-17 13:07:15

让每个脚本在单独的Isolate中运行可能不是您想要的。您应该考虑使用单独的Context来隔离它们,而不是共享单个Isolate

您还应该在自己的专用线程上运行JavaScript,使用适当的本机IPC机制与用户线程通信。然后,执行垃圾收集的适当方法是定期使用v8::IdleNotification() (并且仅在内存耗尽的情况下才调用v8::LowMemoryNotification() ),并简单地限制它可以在垃圾收集上花费的时间。如果您的游戏逻辑需要额外的线程,您可以为每个线程设置一个Isolate,并以这种方式拆分您的Context(尽管这样做将无法在线程之间迁移脚本)。

还有一个更新的API来运行“微任务”,它可能适合你想要的东西,尽管到2015年2月为止,它似乎还处于实验阶段。

当然,首先要确保你的脚本生成的垃圾尽可能少。避免在每个帧的基础上创建新对象,包括函数和包含在其中的局部变量。此外,尝试预先在单个属性包中预先分配所有状态。这将大大减少首先需要收集的垃圾数量。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28345884

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档