浏览器中的javascript数据能容纳多少?

Zo7*_*o72 10 javascript html5

我创建了一个JSFiddle来查看我可以将多少数据推入浏览器.

链接是http://jsfiddle.net/GWxAk/

代码很简单.它只是试图将尽可能多的字符串推入数组中.字符串的长度约为300-310个字符.

我的问题是:结果取决于我的PC上有多少内存?浏览器到浏览器真的不一样吗?

例如,如果我有8gb的ram,如果我有4gb,我会得到更多吗?

var s = '';
for (var i = 0; i < 300; i++) {
    s += 'a';
}

array = [];
count = 0;

function doMore() {
    for (var i = 0; i < 1000; i++) {
        count++;
        array.push(s + count);
    }
};

function repeat() {
    doMore();
    document.body.innerHTML = 'size:' + array.length;
    setTimeout(repeat, 100);
}

repeat();
Run Code Online (Sandbox Code Playgroud)

在我的情况下,chrome挂在14850000,我有4GB的ram这是一个近1500万件的数组.我猜也好

你们这样做了吗?有人可以告诉我们如何尽可能多地为浏览器提供内存

谢谢

Ant*_*haw 8

再次,我的机器有16GB的RAM.我可以看到浏览器RAM使用量随着增加而增加,所以我认为它也受到RAM的限制.

IE crapped out at 16,840,000
Chrome at 14,850,000
Firefox 32,890,000
Safari recycles itself around 8,720,000 (LOL @ Apple)
Run Code Online (Sandbox Code Playgroud)

这是内存使用的截图和firefox http://screencast.com/t/3Xl31yGgHWC


Tom*_*ell 5

假设为UTF8,这意味着您的“ a”为2字节/ 8位。

  • 14,850,000 * 300 = 4455000000个字符

  • 14850000 * 300 * 2 = 8,910,000,000字节

  • 8910000000/1024 = 8,701,171.875 KB
  • (8910000000/1024)/ 1024 = 8,497.238159179688 MB
  • ((8910000000/1024)/ 1024)/ 1024 = 8.298084139823914 GB

因此,我们可以从您的测试中推测出,Chromes JS引擎中字符串的最大长度为4,455,000,000个字符,或约8.3 GB的内存。

但是,当然这不是正在发生的事情。您只有4GB的RAM,但根据数字,到处已经出现了约4298MB的内存,而且还有数组变量本身的结构以及Java VM和chrome本身的结构等。

更不用说您自己推动s + count not,因此随着count位数的增加,添加的字符串的长度也在增加。如果s相同,则V8引擎可能会插入该值以节省内存。作为参考,由于count变量以及其长度的非线性增加而添加的其他字符数为9,7438,889个字符或185.85MB的数据。

因此,这里必须发生其他事情。

至于V8 JS引擎的限制:

http://code.google.com/p/v8/issues/detail?id=847

32位内存地址空间是上限,对于64位,该链接建议为1.9 GB,尽管很有可能是您的OS可以支持并物理可用的上限。

总结一下:

  • 32bit始终是一个上限,而不是您的特定js变量的上限,而是整个js VM,渲染器,页面内容等的上限
  • 您的测试不太可靠,因为所计数的项目不完全相同
  • 如果它们相同,则可能会在特殊情况下处理字符串

编辑: