网络上(包括此网站上)有关于Chrome内存限制的声明,但我发现这些声明与其他问题有关。 window.performance.memory报告了一个793MB的堆限制,它似乎也是B.S.,除非我遗漏了什么,或者除非很多东西没有存储在堆中。显然有一个32位的地址空间限制(除了Linux),所以这是现在的上限,直到Chrome赶上IE和FF并且是64位。
有人会说,正如我在这个网站和其他人看到的那样,“为什么你需要这么多内存”或“你为什么不把东西存放在服务器上”或“浏览器不是正确的地方”记忆密集型工作。“和平。我听说了,让我们同意不同意。
反正。我构建了一个愚蠢的测试夹具(链接到下面的小提琴),看看在Chrome变得不稳定之前可以分配多少内存。答案似乎是“2G左右”。您可以分配更多 - 与3G一样多 - 免费,分配,释放,分配,释放它;但浏览器最终生病了。在3G被释放之后,它会在随后的某个时间随机地突然袭击你。
所以要么是在自己的小便(一个bug),要么一些例程正在使用地址的最高位作为标志(例如,像Visual Basic的字符串存储分配器那样),所以走进“负”地址空间是破坏它的稳定性。有没有人对Chrome内部结构有足够的了解来证实后者的理论?如果是这样的话,那就会把高水位标记为(2 ^ 31 - 总和(其他东西,包括Chrome内部)),这将尽可能接近最终答案。
链接到小提琴:http://jsfiddle.net/marvmartian/evkDM/11/
// allocate lots of memory and fill it with stuff
function testalloc(megabytes) {
var foo = [];
for (var i = 0; i < megabytes; i++) {
foo[i] = new Uint8Array(1000000);
for (var ii = 0; ii < 1000000; ii++) {
foo[i][ii] = (ii + i) % 256 ;
}
}
function bletch(i, ii) {
return foo[i][ii];
}
return bletch;
}