存在以下问题:我正在创建一个编辑器,其中EditorInput包含非常大的对象。在创建了几个这样的编辑器后,我得到了OutOfMemoryError。堆内存分析器显示,有3个类型为EditorHistoryItem的对象,占用了大约80.8%的堆空间。 (我想,我甚至关闭了以前的编辑,但它们仍在记忆中。)
我认为,那些EditorHistoryItems-s与eclipse中的导航历史构建有关。那么,我可以禁用导航历史记录吗?或者在不关闭编辑器的情况下,处理大型EditorInput或EditorPart的其他正确方法是什么?
非常感谢任何建议。
答案 0 :(得分:0)
根据您正在使用的编辑器功能,Eclipse最多可以在内存中保存IEditorInput
个副本。
虽然这适用于< 1,000行Java类,编辑较大的文件时内存不足。
查看FileEditorInput
的源代码,看看是否可以编写自己的版本,实现IEditorInput
接口,将大部分文件保存在磁盘上,只读取部分文件。
最糟糕的情况是,您必须编写自己的Eclipse编辑器。
答案 1 :(得分:0)
好吧,让你的对象变小。我很确定加载几兆字节的物体是不必要的。为什么在打开编辑器并根据用户交互加载/卸载其他对象(激活编辑器部件,几个表格,按下按钮,......)时,不要将一个非常小的对象作为IEditorInput实现加载
如果用户激活编辑器,更改页面(使用MultipageEditor时)或其他可以加载或卸载对象的事件以最小化堆的占用空间,则可以很好地控制通知。绝对没有必要拥有一个大的IEditorInput对象。