Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么内存使用没有正确更新?_Javascript_Google Chrome_Memory - Fatal编程技术网

Javascript 为什么内存使用没有正确更新?

Javascript 为什么内存使用没有正确更新?,javascript,google-chrome,memory,Javascript,Google Chrome,Memory,警告:此代码最终将耗尽浏览器选项卡的内存并使选项卡崩溃 在下面,我设置了一个进程,该进程会泄漏大量内存,并不断报告正在使用的内存量。我正在使用performance.memory API,它似乎只在chrome上实现。问题是,尽管内存使用量正在迅速增加,但报告的数量从未改变。相反,我希望排名靠前的人数会不断增加 以下是javascript代码: (function() { var x = []; function createSomeNodes() { var div,

警告:此代码最终将耗尽浏览器选项卡的内存并使选项卡崩溃

在下面,我设置了一个进程,该进程会泄漏大量内存,并不断报告正在使用的内存量。我正在使用performance.memory API,它似乎只在chrome上实现。问题是,尽管内存使用量正在迅速增加,但报告的数量从未改变。相反,我希望排名靠前的人数会不断增加

以下是javascript代码:

(function() {

var x = [];

function createSomeNodes() {
    var div,
        i = 100,
        frag = document.createDocumentFragment();
    for (;i > 0; i--) {
        div = document.createElement("div");
        div.appendChild(document.createTextNode(i + " - "+ new Date().toTimeString()));
        frag.appendChild(div);
    }
    document.getElementById("debug").appendChild(frag);
}

function clear() { document.getElementById('stats').innerHTML = ''; }

function show(stat) { 
  var div = document.getElementById('stats');
  div.appendChild(document.createTextNode(stat));
  div.appendChild(document.createElement("div"));
 }

var start = Date.now() + 2 * 1000;

function grow() {
    x.push(new Array(1000000).join('x'));
    createSomeNodes();
    setTimeout(grow,40);

if (Date.now() < start) { return; }

              (function() {
                clear();
                var pm = window.performance && window.performance.memory;
                if (!pm) {
show("no performance.memory api");
                  return;
                }
                var lim = pm.jsHeapSizeLimit, // Memory the JavaScript heap is limited to
                    // Memory allocated on the JavaScript heap (includes free space)
                    total = pm.totalJSHeapSize,
                    used = pm.usedJSHeapSize; // Memory currently being used 
                show("Crash Index (% of Heap Limit Allocated): " + Math.round(total / lim * 100));
                show("% of Allocated Memory Used: " + Math.round(used / total * 100));
              })();

}


    setTimeout(grow,1000);
})()
(函数(){
var x=[];
函数createSomeNodes(){
var部门,
i=100,
frag=document.createDocumentFragment();
对于(;i>0;i--){
div=document.createElement(“div”);
div.appendChild(document.createTextNode(i+“-”+新日期().toTimeString());
儿童福利机构(分部);
}
document.getElementById(“调试”).appendChild(frag);
}
函数clear(){document.getElementById('stats')。innerHTML='';}
函数显示(stat){
var div=document.getElementById('stats');
div.appendChild(document.createTextNode(stat));
div.appendChild(document.createElement(“div”));
}
var start=Date.now()+2*1000;
函数grow(){
x、 推送(新数组(1000000).join('x');
createSomeNodes();
setTimeout(grow,40);
if(Date.now()

如果我将变量
start
设置为一个更高的数字,我会看到一个更高的initial值,我称之为“崩溃指数”,但在第一次显示之后,即使这个值也不会增加

出于安全原因,默认情况下,Google Chrome不会通过
性能.内存提供精确信息


因此,您必须通过带有此标志的终端打开浏览器,启用精确内存信息,以允许Google Chrome显示有关您计算机的精确信息。

出于安全原因,Google Chrome有一个限制,将内存采样限制为每20分钟一次。在Chrome68+中,对于来自与网页相同来源的脚本(eTLD+1),该限制已降至每50毫秒一次。这意味着您可能不再需要
——启用精确的内存信息


我为您的代码编写了一个版本,其中有一个“停止”按钮,以防止选项卡崩溃。现在我来看看发生了什么。看看这个。搜索performance.memory这应该可以工作--启用精确的内存信息;添加这个答案,我会接受。链接上说,如果没有标志,内存信息是“bucketized”。“bucketized”在这里是什么意思?