Vaadin - 摧毁关闭的窗口

时间:2013-01-14 07:05:46

标签: java memory-leaks vaadin

我有一个使用multitab方法的Vaadin应用程序。如果未找到Application.getWindow(String name),则会覆盖super.getWindow(name),它会为应用程序创建并添加新窗口。所有窗口都有Window.CloseListener个要输出的打印消息。此外,我看到了创建和破坏Windows的时刻 - 构造函数和finalize()也将打印消息打印到控制台。

当我刷新相同的浏览器选项卡时,会创建一个新窗口,我在控制台中看到Window.CloseListener的消息,而没有来自finalize()方法的消息。如果我添加一个单例AtomicLong来计算实例(在finalize()中添加构造函数,dec),我会看到越来越多的实例(在那些刷新上)并没有随着时间的推移而减少。

似乎Vaadin以某种方式存储关闭的窗口。我还jmap编了一个应用程序并在Eclipse MAT中打开了堆文件。 MAT表示闭合窗口UriFragmentUtility的一个组件用链引用:Application - > WebApplicationContext - > CommuncationManager - > (通过paintableMap)UriFragmentUtility(见附图)。

如何销毁关闭的窗口以防止内存泄漏?

Eclipse MAT screenshot of path from <code>UriFragmentUtility</code> to GC roots, <code>DofApplication</code> is instance of <code>com.vaadin.Application</code>

更新 我发现在代码窗口中只添加到Vaadin Application并且不会被删除。添加Application.removeWindow()后,没有任何更改与刷新相同标签相关。

0 个答案:

没有答案
相关问题