谷歌浏览器有内存限制吗?

41

Chrome 单个标签页的默认内存限制是多少?

5个回答

22

回答这个问题很困难,只能在特定任务和特定构建中进行基准测试才能找出正确的答案。

以下有几种情况会导致使用1到2GB的内存:

  • Chrome版本:因为不同的V8引擎有不同的内存限制。
  • Chrome平台:32位或64位。
  • 操作系统本身:chrome可以使用不同的标志针对不同的平台进行构建。
  • 再次提到Chrome版本:互联网上有关重新编译Chrome并使用某些编译标志来允许使用更多内存的讨论,然后Chrome开发人员决定排除这些标志,因为某些原因。谁知道——也许他们将再次包含它们或增加默认堆大小。
  • 视频内存:在某些情况下,页面的内容可能需要一些视频内存,如果您的显卡内存不足,Chrome将从通用内存中获取,这将增加页面的内存使用量。

现在,使用64位Chrome版本47,在Windows 8.1上可以使用一个选项卡最多使用1.8GB内存,然后崩溃。

更新:

我发现一些奇迹发生了,限制已经改变。
对于Chrome 63版本,在x64 Windows 10操作系统上,我可以分配高达3.5GB的内存,解析一个巨大的JSON字符串,然后在页面上显示它。
这个数字是从Chrome任务管理器和Process Explorer的私有字节指标中获取的。


@btelles 我针对不同的点使用了不同的来源。你问的是哪一个? - cassandrad
1
请问您能提供每个TAB限制的源代码吗? - user643011
@user643011 是的,它已经在我的机器上测试过了。 - cassandrad

11

有关非常类似的话题有一些讨论。 在这里

您应该尝试以下操作:

右键单击 Chrome 图标,然后转到属性。Chrome 应该在这里:

"C:\Documents and Settings\%USER%\Local Settings\Application Data\Google\Chrome\Application\chrome.exe" 

在此行尾添加 --purge-memory-button,其中 %USER% 是你电脑上的用户名,显然 ;)。

它应该看起来像这样:

"C:\Documents and Settings\%USER%\Local Settings\Application Data\Google\Chrome\Application\chrome.exe" --purge-memory-button 

现在,当Chrome正常运行时,请按shift+Esc,现在您有了一个新选项“Purge Memory”,可以释放内存。那些在特定时间不需要注意的标签将被从RAM中清除。

您也可以添加这些行之一:

永远不要自愿放弃内存

--memory-model=high  

切换标签时自愿缩小工作集

--memory-model=medium 

在切换标签页时自动减少工作集,并在

--memory-model=low 

浏览器没有在活动使用中

您可以在目标位置后面添加几行"C:\Documents and Settings\%USER%\Local Settings\Application Data\Google\Chrome\Application\chrome.exe"

假设我们想要使用“清除内存”和“低内存模式”这两行。它会像这样:

"C:\Documents and Settings\%USER%\Local Settings\Application Data\Google\Chrome\Application\chrome.exe" --purge-memory-button --memory-model=low 

8
这并没有回答这个问题。 - cowlinator
6
但它回答了我的问题,或多或少。 --memory-model 参数仍然可用吗?我找不到任何官方文档 - 只有一个关于Chromium开发人员对其实现不满的论坛帖子。 - stefanct

2
一旦在特定平台和特定版本上进行基准测试,您就可以得到完美的答案。结果仅适用于您试验的那个平台和Chrome版本,因为有许多因素可能会对结果产生不同的影响,包括:
  1. Chrome版本可能具有不同的v8引擎,并非所有v8引擎都具有相同的内存限制。此外,在基准测试Chrome时,32位和64位架构也会出现。默认堆大小可能因v8版本而异。
  2. 您运行Chrome的系统配置也与之相关。Chrome需要图形内存/视频内存,如果没有这些,它将使用内部内存,从而导致更多的内存使用。
  3. 这也与进程本身有关,每个线程都需要一些内存进行“簿记”,尤其是它的堆栈。32位进程只能寻址4GB的内存。64位进程没有地址空间问题,而是实际分配的问题。然而,程序不应接近任何此类限制或需要担心它,Chrome也是如此。
我曾经尝试过从Chrome中的PHPMyAdmin导出并打印数据库。它有1.22GB的DB大小,Chrome崩溃了。我执行了相同的文件导出操作,神奇地它正常工作了。
关于v8引擎,32位系统上有512MB的内存限制,64位系统上有1434MB(1.4GB)的内存限制。Chrome以v8为核心,这是影响内存限制的主要因素。

你是否有关于Chrome如何使用系统配置来决定内存限制的具体信息? - Brad
我认为没有像这样的东西。它取决于系统的配置而有所不同。但是我没有找到任何证明Chrome如何决定内存限制的内容。请查看更新的答案。 - Kiran Maniya
1
限制不会是随意的...它将基于一些信息。了解具体细节将会很有帮助,并且回答这个问题。 - Brad

0

我通过传递以下命令行选项,成功地增加了基于nw.js(chrome)的桌面应用程序的内存限制:

Node.js: node --max_old_space_size=12288 script.js
Google Chrome: chrome.exe --js-flags="--max_old_space_size=12288"
NW.js: add "js-flags": "--max_old_space_size=12288" to the package.json.

根据您的需求调整12288(12GB)


2
是的,Google Chrome浏览器有内存限制,请查看此链接https://js9.si.edu/js9/help/memory.html。 - Umesh
默认情况下是可以的,但使用该标志后,我能够将128GB的数据储存到我的SD卡中。 - Daniel Sokolowski

0

如果你正在运行32位的Chrome,你无法分配超过2GB的内存,因为这是32位Windows进程的进程限制。对于64位的Chrome,有4GB的限制。Chrome不允许超过4GB的内存分配。


这个答案似乎与来源一致:https://github.com/v8/v8/blob/main/src/flags/flag-definitions.h#L1233 - David Jonsson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接