11

我在所有经过测试的浏览器上都发现了这一点——Windows 上的 IE、Firefox、Chrome 和 Safari,以及 Apple 上的 Safari。

据称,浏览器刷新、后退按钮或前进链接应该转储浏览器节点和 javascript 变量和对象等。这似乎不适用于 WebGL。我在开发需要大约 100MB 到 200MB 内存的复杂 WebGL 应用程序时首先注意到它。在开发过程中,我必须进行大量刷新,并且我的计算机会在 5-10 次刷新后开始变慢并死机。

经过一番研究,我意识到这不应该。内存泄漏的公认解决方案是刷新应该释放所有 javascript 对象和变量以及 dom 节点的页面。但是看看下面的图片:

那么这里有什么问题呢?在小型应用程序上没有注意到,但对于像我这样的大型 WebGL 应用程序 (orbitingeden.com),这是一个真正的问题,我的用户会认为该软件比实际情况更需要资源。下图显示这些刷新吞噬了我所有的可用内存,因此垃圾收集不起作用和/或 JS 和 DOM 对象没有被释放:

在此处输入图像描述
(来源:orbitingeden.com

有人知道强制浏览器进行真正的内存转储的技巧吗?为什么那里的所有文档都是错误的?

4

1 回答 1

2

垃圾收集的要点之一是对象未被使用时不会立即清理。垃圾收集器可以自己确定何时最方便进行收集。

只要有足够的内存可以使用,垃圾收集系统将一些未使用的对象留在堆中是正常的。计算机不会因为有大量未使用的内存而运行得更快。

于 2012-07-01T23:56:42.457 回答