[英]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.