簡體   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