我正在创建一个新的演示者:
new MyPresenter(new MyView());
它注册了一些事件处理程序并绑定到视图等。最终,我可能会“关闭”该视图,以便浏览器不再呈现它。我没有在任何地方保留对此MyPresenter
实例的引用。
在关于此主题的Google论坛中,传统的响应是“将引用设置为null”,然后不要担心它。与Javascript不同,我不能仅仅因为显而易见的原因而在Java中说this = null;
。但是在Javascript中,很容易找出我知道将不再使用的对象引用。
我的问题:我如何判断此演示者是否已被垃圾收集,因为我没有保留对它的引用?它显然存在。我是否应该相信GWT和JS将会解决这个问题?或者我是否需要保留自己对MyPresenter
的引用,以便在完成后可以手动null
?
答案 0 :(得分:2)
有两种内存泄漏:
关闭应用程序后,DOM /浏览器级内存泄漏通常会持续存在。 AFAIK仅旧浏览器(IE6)受到影响,这就是GWT使用special way附加处理程序的原因。
对于现代浏览器而言,这应该是一个非问题,如果您关闭应用程序,至少它们将不是问题。然而,它们可能成为应用程序内存泄漏。 (有关详细信息,请参阅here)。但总的来说,现代Javascript GC在释放未使用的内存方面相当不错。
应用程序内存泄漏可能是长时间运行的应用程序以及动态创建大量视图/演示者并通过Eventhandler保持引用时的问题。但这里真的取决于有关各方的范围 这个post是一个很好的参考,有更多的信息。
最后为了确保您确实没有任何应用程序内存泄漏,您应该使用Dev Tools Heap Profiler来检查更长时间内的内存消耗。
这个blog post有更多的信息。