Eclipse-RCP отключает создание истории навигации - PullRequest
1 голос
/ 06 марта 2012

Существует следующая проблема: я создаю редактор, в котором EditorInput содержит довольно большой объект.После создания пары таких редакторов у меня появился OutOfMemoryError.Анализатор памяти кучи показал, что существует 3 объекта типа EditorHistoryItem, которые занимают около 80,8% пространства кучи.(Я думаю, что я даже закрыл предыдущие редакторы, но они все еще в памяти).

Я думаю, что эти EditorHistoryItems-s связаны с построением истории навигации в затмении.Итак, можно ли отключить историю навигации?Или какой другой правильный способ избавиться от большого EditorInput или EditorPart, не закрывая редактор?

Любые советы очень приветствуются.

Ответы [ 2 ]

0 голосов
/ 07 марта 2012

Ну, сделай свой объект меньше. Я уверен, что нет необходимости загружать несколько мегабайт объектов. Почему бы вам не загрузить довольно маленький объект в качестве реализации IEditorInput при открытии редактора и загрузке / выгрузке дополнительных объектов на основе взаимодействия с пользователем (активация части редактора, нескольких вкладок, нажатие кнопки, ...).

Вы довольно хорошо контролируете получение уведомлений, если пользователь активирует редактор, изменяет страницу (при использовании MultipageEditor) или другие события, в которых вы можете загружать или выгружать объекты, чтобы минимизировать объем кучи. Абсолютно не нужно иметь большой объект IEditorInput.

0 голосов
/ 06 марта 2012

В зависимости от того, какие функции редактора вы используете, Eclipse может иметь до 5 копий вашей IEditorInput в памяти.

Хотя это прекрасно работает для <1000 строк Java-классов, вам не хватает памятипри редактировании больших файлов. </p>

Взгляните на исходный код FileEditorInput и посмотрите, сможете ли вы написать свою собственную версию, реализующую интерфейс IEditorInput, который хранит большую часть вашего файла на диске и просто читает частифайла.

В худшем случае вам придется написать собственный редактор Eclipse.

...