【问题标题】:Benckmarks for Browser Garbage Collection浏览器垃圾收集的基准
【发布时间】:2015-02-07 22:29:35
【问题描述】:

似乎很多人都意识到 Javascript 实例的垃圾收集。

我正在编写一个框架,出于代码质量目的,可以真正受益于返回新实例的函数,这些实例随后将被垃圾收集。在我的例子中,单个用户操作可以创建大约 5000 个这样的实例。

对象池是可能的,但会使代码复杂化。

是否有一些基准可以证明垃圾收集的损失 - 无论是在内存方面还是在性能方面?

【问题讨论】:

  • 你的问题很有趣,但我担心这对 SO 来说太主观了。一般来说,我会说你不应该担心它,除非你发现了性能问题。换句话说:不要过度关注速度指标;看大局。
  • 同意。我会编辑它。
  • 这年头,只有需要在蹩脚手机上流畅运行的游戏才需要担心 GC 暂停……

标签: javascript performance memory garbage-collection


【解决方案1】:

关于this SO question,我运行了一个小测试,它创建了 13 次 10,000 个实例,这些实例将被垃圾收集。

主要见解

  • GC 花费的时间非常短 - 1/10-2.4 毫秒
  • 平均而言,每 10,000 个实例的块大约发生 2 次 GC。
  • 内存保持在 20MB 以下。

测试结果

Test01 使用按钮触发了几次。控制台时间线显示:

代码

// Bounds

function Bounds() {
    this.x = Math.random();
    this.y = Math.random();
    this.h = Math.random();
    this.w = Math.random();
}

// Rect

function Rect() {
}

Rect.prototype.getBounds = function() {
    return new Bounds();
}

// Renderer

function Renderer() {
    this.bounds = null;
}

Renderer.prototype.setBounds = function( aBounds ) {
    this.bounds = aBounds;
}

// Test

function Test01() {
    var iRenderer = new Renderer();
    var iRect = new Rect();

    for ( var i = 0; i < 100000; i++ ) {
        iRenderer.setBounds( iRect.getBounds() );
    }
}

规格

  • 2.5 GHz 英特尔酷睿 i5。
  • 4GB 1600 MHz DDR3
  • Chrome 39.0.2171.71(64 位)

【讨论】:

    猜你喜欢
    • 2017-11-16
    • 1970-01-01
    • 2012-07-02
    • 2018-12-30
    • 1970-01-01
    • 2011-12-22
    • 2011-11-07
    • 2013-04-01
    • 2012-06-23
    相关资源
    最近更新 更多