网络工作者是否有自己的垃圾收集器?

dav*_*mer 6 javascript browser garbage-collection web-worker

我有一些处理不一定是cpu密集型的,但是会创建许多临时对象,这会导致垃圾收集器在动画等过程中出现干扰.

将临时对象创建过程卸载到Web工作者是否有助于缓解这种情况?换句话说 - GC打嗝是否会被隔离到Web工作线程并且不会影响我的主线程,或者GC是否会影响两个线程?

the*_*472 6

ECMAScript规范没有指定任何表单内存管理,垃圾收集仅在非规范部分中引用.

类似地,除了wrt之外,web worker规范没有说明垃圾收集.一些物体必须存活多久.

所以这是特定于实现的行为.即使实现实现了每个工作者GC并避免了一般情况下的共享开销,它们仍可能由于内存压力而触发所有工作程序的全局集合,尤其是在内存受限的系统上.

也就是说,你很可能会与工人实现一些GC隔离.但是你必须注意避免工作者和主线程之间的消息传递开销,因为序列化消息(对于结构化克隆算法)会产生额外的垃圾.使用transferables或共享内存缓冲区可以避免这种情况.

  • 它们的实现发生了变化,GC属性不是它们保证的一部分,因此它们不会为外部用户记录它.但你仍然可以在他们的bugtrackers或科技博客中找到信息.对于firefox而言,GC已经被划分了一段时间,因此存在一些隔离,但是我提到的内存压力的回落事件以及一些共享的东西也存在.tl;博士:是的,排序.但没有官方或指定的保证,它取决于变更,取决于实施 (2认同)