垃圾收集每三个周期

时间:2018-01-25 13:02:20

标签: javascript angularjs memory-leaks garbage-collection google-chrome-devtools

在我的AngularJS 1.5应用程序中,我发现了一种非常奇怪的记忆行为。

我设置了一个非常简单的测试: 一个几乎为空的模板是状态1(使用Angular ui-router),它只转发到状态2。 状态2的模板由作用域内的数组填充了一个相当大的虚拟表。 在控制器中:

$scope.foodahoo = [];
            for(var i = 0; i < 300; i++) {
                var obj = {};
                for(var j = 0; j < 50; j++) {
                    obj['prop' + j] = 'value' + j;
                }
                $scope.foodahoo.push(obj);
            }

在模板中:

<table>
        <tr ng-repeat="myobj in foodahoo">
            <td ng-repeat="(key, value) in myobj">{{key}}: {{value}}</td>
        </tr>
</table>

预期的内存行为:在状态1,堆开始时为低电平,当我进入状态2时上升,在返回到状态1时下降到相同的低电平等等 - 无论我多久重复一次周期。

然而,实际行为是这样的(记录在Chrome开发工具中):

enter image description here

标记为红色表示从状态1到状态2的状态变化。 看起来在开始时只需添加内存而不会在其间收集垃圾。然而,然后,每三个周期,正好在加载状态的中间,Chrome认为:&#34;哎呀,我消耗了太多的内存,让我们释放一些垃圾。&#34; 然而,即便如此,堆也没有达到它在起始点(状态1)的水平。

$scopethis替换controller as ...无效:结果相同。然而,使用纯HTML显示正常行为。

所以,我的问题是: 这只是一个Chrome怪癖吗?或正常的浏览器行为?或者我的$scope实际上是否存在常规内存问题?如果是:我如何进一步调查?堆配置文件比较还没有给我任何见解。

0 个答案:

没有答案
相关问题