繁体   English   中英

是否在未使用的小部件上使用GWT垃圾回收?

[英]GWT Garbage Collection on unused Widgets?

我对以下示例中何时以及是否触发GWT垃圾回收的问题感兴趣。

我有一个复合:

class A extends Composite implements HasClickHandlers {

  ...

  FocusPanel panel = new FocusPanel();

    @Override
    public HandlerRegistration addClickHandler(ClickHandler handler) {
        return focusPanel.addClickHandler(handler);
    } 

}

在视图类中,我创建此窗口小部件,添加一个单击处理程序并将此窗口小部件添加到面板中:

A widget = new A();
widget.addClickHandler(someClickHandler);
somePanel.add(widget);

在应用程序中的某个点上,我清除了输入小部件的面板。 因此,该小部件不再附加到DOM,并且此小部件上没有指向的引用。

void removeAll() {
   somePanel.clear();
}

小部件和点击处理程序会发生什么。 GWT垃圾回收会处理吗? 我需要保存处理程序注册并自己删除点击处理程序吗?

小部件系统的优点之一是,它可以为您管理所有这些内存问题。 假设您仅通过将小部件添加到其他小部件中来组合小部件(并且从不使用getElement()。appendChild(...)等),则所有处理程序在连接时都将自动连接到dom,并在它们被连接时自动取消连接分离或页面被卸载。

这意味着您只需将小部件当作普通对象对待-如果它们不再附加到页面上,并且您没有对其进行引用,则无论浏览器如何,它们都将被正确地垃圾回收。

您所指的特定内存泄漏仅是较旧的浏览器中的问题-现代Webkit / Gecko(Chrome / Safari / Opera和Firefox)没有这些问题,IE 10或11也没有这些问题。

请访问http://www.gwtproject.org/articles/dom_events_memory_leaks_and_you.html ,以更深入地讨论Widget如何实现此内存泄漏预防代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM