以下代碼會導致節點在耗盡內存時消耗大量內存並導致崩潰。但是,如果我將找到的字符串的長度從13更改爲12,一切都很好。它看起來像由正則表達式搜索返回的字符串包含對被搜索的原始字符串的隱藏引用。但是隻有找到的匹配長度至少爲13個字符。 這是一個錯誤還是有這個行爲的一些很好的理由?節點正則表達式分析器中的內存泄漏?
function randString(length) {
var a = "a".charCodeAt(0),
result = [];
for(var i = 0; i < length; i++) {
result.push(a + Math.floor(Math.random() * 26));
}
return String.fromCharCode.apply(null, result);
}
var arr = [];
for(var i = 0; i < 1000000; i++) {
if(i % 1000 === 0) console.log(i);
var str = randString(13);
str = randString(5000) + "<" +str + ">" + randString(5000);
var re = /<([a-z]+)>/gm;
var next = re.exec(str);
arr.push(next[1]);
}
你確定12個字符的版本不是也使用了大量的內存,但只是不足以讓它崩潰? – robertklep
12個字符的版本使用少於100 MB。但有13個或更多的字符,它將在145,000次迭代中達到1.5GB。 – SpiderPig
我在Chrome中觀察到同樣的情況(版本41.0.2272.76基於Ubuntu 14.04,在LinuxMint 17(64位)上運行) –