Chrome无法释放内存,垃圾收集不会按预期发生(Mootools/MochaUI库)

fre*_*tec 26 javascript mootools garbage-collection google-chrome

背景:我目前正在使用一个使用MochaUI库的Intranet站点(使用虚拟桌面演示).我正在使用Mootools 1.2.4和MochaUI 0.9.7.在我的"虚拟桌面"实现中打开的窗口通过iframe加载其内容.在css和脚本方面,一些加载的页面非常大,因此当用户关闭窗口时,Window对象充分地被垃圾收集是很重要的.这显然是由图书馆照顾的(使用Firefox时它确实做得很好).

更新 最初发布的问题已从后续编辑/更新变得过长.标题不再准确,所以我也改变了.另外,请参阅下面的答案以获得部分解决方案.

以下是要点:

  1. Chrome就像这样:

    • Chrome无法释放为MochaUI窗口对象关闭时分配的内存.相反,Chrome的内存使用量(在字面上)冻结在窗口加载其iframe内容后达到的水平,设置内存使用量的下限直到刷新页面.
    • 随后的窗口打开/关闭,该过程使用的存储器继续增加.最终,达到某种类型的上限,并且内存使用量停止攀升,因为陡峭/开始振荡而不是急剧上升.
    • 当有问题的窗口加载相当大(内存方面)的iframe内容时,这个问题最明显.我用于所有测试目的的窗口在其iframe中加载了一个580 kb的页面(未缓存).
  2. 奇怪的是,预期的垃圾收集确实发生了

    • 浏览器随后被最小化
    • 在同一浏览器窗口中打开另一个选项卡
    • 内存时间轴正在开发人员工具中记录.(喜剧选项)
    • 这种行为是否表明任何可能解决#1的方法?

Dog*_*ett 6

我不确定这是否在Windows中进行过测试,但如果是这样,请记住,无论何时最小化Windows中的窗口,它都会将所有数据移动到页面文件中.当再次打开窗口时,除非程序试图访问它们,否则它不会移回内存块,因此任何垃圾都会停留在页面文件中但实际上并未收集.

如果你自动化它,它不仅会减慢程序速度,也不会对任何内存问题有所帮助.

请参阅以下网址以获取更多信息

https://micksmix.wordpress.com/2010/01/08/why-does-task-manager-show-an-applications-memory-usage-drop-after-minimizing-it-to-the-the-taskbar/