有一个问题:我正在创建一个编辑器,它的EditorInput包含了一个非常大的对象。在创建了几个这样的编辑器之后,我得到了OutOfMemoryError。堆内存分析器显示,有3个EditorHistoryItem类型的对象,它们占据了大约808%的堆空间。(我想,我甚至关闭了以前的编辑器,但它们仍然在内存中)。
我认为,这些EditorHistoryItems-s与eclipse中的导航历史构建有关。那么,我可以禁用导航历史记录吗?或者,在不关闭编辑器的情况下处理大型EditorInput或EditorPart的其他正确方法是什么?
如有任何建议,我们将不胜感激。
发布于 2012-03-07 05:21:12
好的,让你的对象更小。我非常确定加载几兆字节的对象是不必要的。在打开编辑器并基于用户交互加载/卸载其他对象时,为什么不加载一个相当小的对象作为IEditorInput实现呢(激活编辑器部件,几个表,按下一个按钮,等等)懒洋洋的。
您可以很好地控制用户是否激活编辑器、更改页面(当使用MultipageEditor时)或其他事件,在这些事件中,您可以加载或卸载对象以最小化堆的内存占用。绝对不需要有一个大的IEditorInput对象。
发布于 2012-03-06 23:29:29
根据您使用的编辑器函数的不同,Eclipse的内存中最多可以有5个IEditorInput副本。
虽然这对于< 1,000行的Java类非常有效,但在编辑较大的文件时会耗尽内存。
看一下FileEditorInput的源代码,看看您是否可以编写自己的版本来实现IEditorInput接口,该接口将文件的大部分内容保留在磁盘上,只读取文件的一部分。
最坏的情况是,您必须编写自己的Eclipse编辑器。
https://stackoverflow.com/questions/9585968
复制相似问题