我在所有测试过的浏览器上都发现了这一点——Windows 上的 IE、Firefox、Chrome 和 Safari,以及 Apple 上的 Safari。
据称,浏览器刷新、后退按钮或前向链接应该转储浏览器节点以及 JavaScript 变量和对象等。WebGL 似乎并非如此。我第一次注意到它是在开发一个需要大约 100MB 到 200MB 内存的复杂 WebGL 应用程序时。在开发过程中,我必须进行大量刷新,并且在刷新 5-10 次后我的计算机就会开始变慢并冻结。
经过一番研究,我意识到这不应该是这样。内存泄漏的公认解决方案是刷新页面should释放所有 javascript 对象和变量以及 dom 节点。但看看下面的图片:
那么这是怎么回事呢?在小型应用程序中,这一点不会被注意到,但对于像我的 (orbitingeden.com) 这样的大型 WebGL 应用程序,这是一个真正的问题,我的用户会认为该软件比实际情况更消耗资源。下图显示这些刷新吞噬了我所有的可用内存,因此垃圾收集不起作用和/或 JS 和 DOM 对象没有被释放:
(source: orbitingeden.com http://orbitingeden.com/images/big_memory_after.png)
有人知道强制浏览器进行真正的内存转储的技巧吗?为什么所有的文档都是错误的?
垃圾收集的要点之一是对象是not不用后立即清理。垃圾收集器可以自行确定何时最方便进行收集。
只要有足够的内存可供使用,垃圾收集系统在堆中留下一些未使用的对象是正常的。计算机并不会因为拥有大量未使用的内存而运行得更快。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)