垃圾收集需要很长时间[如何调试收集的内容?]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了垃圾收集需要很长时间[如何调试收集的内容?]相关的知识,希望对你有一定的参考价值。

我有一个问题,主要的javascript线程被垃圾收集阻止。 (见下面的截图)。用例是我从具有oboe.js的服务器流式传输JSON,处理一些节点,并将节点放在WebGl渲染器中并在流式传输时渲染它们。这很好用,除了垃圾收集器由于收集9mb的块需要〜500ms而导致2fps。

问题是我不知道收集了什么以及如何防止收集它。所以我的问题是双重的:

  • 如何减少垃圾收集器收集或阻止垃圾收集器运行的时刻的块大小?
  • 如何调试正在收集的内容?

发生了什么的片段:

Performance Chart Chrome Dev Tools

答案

毕竟我发现了这个问题。有一个解析过程会吐出一个变量,这个变量是一个非常复杂的嵌套对象。

someModule.parse(someString, function(result){
    // result = complex deep nested object
    // process result
});

在进程结果阶段之后,结果变量被标记为垃圾收集,它立即执行。我将结果缓存在临时变量中并稍后“手动”删除它,这解决了问题。

以上是关于垃圾收集需要很长时间[如何调试收集的内容?]的主要内容,如果未能解决你的问题,请参考以下文章

确定JVM垃圾收集器的运行时

JVM详解——垃圾回收算法

第十四章:垃圾回收概述

JVM-11. 垃圾回收概述及算法

Erlang SSL TCP 服务器和垃圾收集

R GC() CMD 批处理执行时间上的垃圾收集