在GWT中遇到内存泄漏的可能原因是什么?

时间:2013-01-27 20:16:31

标签: gwt

任何人都可以解释在开发模式和实时模式下使用GWT时发生内存泄漏的可能方法吗?

我参考以下问题

How to resolve a memory leak in GWT?

在其中一个答案中找到了以下链接..

https://developers.google.com/web-toolkit/articles/dom_events_memory_leaks_and_you

他们主要处理Widget创作和浏览器事件。是否有任何其他可能的块漏洞发生内存泄漏,比如在做RPC时...使用很多渲染方法..等等?

1 个答案:

答案 0 :(得分:0)

您列出的链接谈到了GWT如何避免浏览器所知的各种内存泄漏 - 在任何地方都没有引用dom元素或小部件的情况,但浏览器仍然不会从内存中释放它。您需要注意的唯一情况是,当您创建自己的小部件来容纳其他小部件时 - 在这种情况下,您需要注意在每个子级上调用attach和detach方法。坚持使用已知良好的容器和面板将完全避免这种情况,并且永远不会直接调用附加或分离方法。

除此之外,内存泄漏就像其他任何类型的开发一样 - 我们需要注意保留你不再使用的东西的引用。我不同意链接问题中的一些答案 - Java内存泄漏工具不能很好地帮助在Dev Mode上跟踪这些对象,因为他们考虑的是JVM和Java对象,而不是浏览器和JavaScript。

相反,将样式设置为PRETTY进行编译,并使用Chrome的Inspector等工具。这可以用来查看消耗内存的对象,并告诉他们持有什么。该策略与任何其他堆分析工具(JProfiler,VisualVM等)相同。编写代码的标准规则适用 - 如果你持有一个你不需要的对象,将其清零或从持有它的集合中删除它。显然,如果你仍然需要它,请保留它 - 而更高的东西应该放弃那个