6

我正在创建一个新的演示者,如下所示:

new MyPresenter(new MyView());

它注册一些事件处理程序并绑定到视图等。最终,我可能会“关闭”该视图,使其不再由浏览器呈现。我没有维护对MyPresenter任何地方的这个实例的引用。

在有关此主题的 Google 论坛中,常规响应是“将您的引用设置为 null”,然后不要担心。this = null;与 Javascript 不同,出于显而易见的原因,我不能只说Java。但是在 Javascript 中,很容易将我知道将不再使用的对象引用清空。

我的问题:由于我没有维护对它的引用,我如何判断该演示者是否已被垃圾收集?它非常明显地存在。我是否应该相信 GWT 和 JS 会解决这个问题?或者我是否需要维护自己的引用,MyPresenter以便null在完成时可以手动操作它?

4

1 回答 1

2

内存泄漏有两种:

  • DOM/浏览器级别的内存泄漏
  • 应用程序内存泄漏。

DOM/浏览器级别的内存泄漏通常会在您关闭应用程序后持续存在。AFAIK 只有旧浏览器 (IE6) 受到影响,这就是 GWT 使用特殊方式附加处理程序的原因。
对于现代浏览器来说,这应该不是问题,至少如果您关闭应用程序,它们将不是问题。然而,它们可能成为应用程序内存泄漏。(有关更多详细信息,请参见此处)。但总的来说,现代 Javascript GC 在释放未使用的内存方面非常出色。

应用程序内存泄漏可能是长时间运行的应用程序的问题,并且当您动态创建大量视图/演示者并通过事件处理程序保持引用时。但这实际上取决于有关各方的范围。
这篇文章是一个很好的参考,其中包含更多信息。

最后,为了确保您确实没有任何应用程序内存泄漏,您应该使用Dev Tools Heap Profiler检查更长时期内的内存消耗。
这篇博客文章对此有更多信息。

于 2012-04-23T21:44:13.700 回答