1

在 Mac、Chrome、Firefox 和 Safari 中运行基于 GWT 的 Web 应用程序时,我们遇到了严重的内存问题。

例如,使用 Firefox 时,在 Mac 上查看活动监视器时,即使频繁刷新,内存消耗也会随着时间的推移而迅速增加,并且在一个重要会话后可能达到 1 GB。Chrome 和 Safari 也会出现类似的现象。

但是,我们看不到使用各种分析工具的真正原因,包括 Java JProfiler(用于 GWT)和 Chrome 分析器以及查看原生 JS、侦听器和 DOM 元素的时间线。

实际上这里有两个相关的问题:

  1. 长时间使用 UI 而没有刷新,内存在增加。在这种情况下,我们可以看到一些无法访问的未收集垃圾 SVG 元素(我们使用的是基于 SVG 的画布),但是 Activity Monitor 中的内存增加量远远高于我们对这些垃圾的预期。

  2. 即使经过多次刷新,内存仍然很高,即使分析器显示上述所有垃圾都完全消失了。

我们正在追查这个漏洞一段时间,但没有任何结果,所以我将不胜感激。

谢谢,

亚龙。

4

2 回答 2

0

我之前在我的 GWT 应用程序中发现了一些漏洞,由于 Java 的垃圾收集器隐藏了正在发生的事情,因此确定它们的来源肯定不容易。泄漏的最常见原因是循环引用,因此多个对象不能被垃圾收集,因为它们相互引用。你自己很难发现它们,所以我使用了一个名为FindBugs的库——它还带有一个非常方便的Eclipse 插件。FindBugs 确实可以找到您可能考虑的任何东西,并且为我创造了奇迹。但请确保先使用设置;默认情况下不启用循环引用检查。

Bruno_Ferreira 也提出了一个很好的观点 - 确保您是最新的 GWT 版本,因为它们总是在改善内存泄漏。

于 2013-08-29T04:16:41.617 回答
0
  1. 问题只出现在 Mac 上?
  2. 您使用的是什么 GWT 版本?2.5?
  3. 您是否看到此问题https://code.google.com/p/google-web-toolkit/issues/detail?id=6938

我之前使用 GWT 遇到过几个泄漏问题,但在 2.5 版本中它工作正常,即使在 IE 中也是如此!

于 2013-08-28T19:52:11.417 回答