2016-09-22 2 views
0

Следующие действия в приложении Eclipse 3.7 RCP - выпадающее всплывающее меню при нажатии в строке таблицы.e4 Приложение RCP, утечка ActionContributionItem в меню

private void hookContextMenu(TableViewer viewer) { 
    MenuManager menuMgr = new MenuManager("drillDownPopup"); 
    menuMgr.setRemoveAllWhenShown(true); 
    menuMgr.addMenuListener(new IMenuListener() { 
     @Override 
     public void menuAboutToShow(IMenuManager manager) { 
      //.. add bunch of actions to IMenuManager 
     } 
    }); 

    Menu menu = menuMgr.createContextMenu(viewer.getControl()); 
    viewer.getControl().setMenu(menu); 
    getSite().registerContextMenu(menuMgr, viewer); 
} 

Когда это работает в е4 (неон, последнее обновление) ни один из ActionContributionItem случаев не получают GC'ed, который создает довольно значительную утечку, когда есть много пунктов, каждый из которых содержат ссылки на некоторые другие объекты.

Я делаю что-то неправильно в e4?

+0

Это не e4. У вас есть приложение режима совместимости с 3.x, работающее на Eclipse 4. –

+0

ОК. Это приложение e3 работает в e4 target. Вы знаете, как остановить утечку? – Dima

+0

Код, подобный этому, повсюду в Eclipse, и я не видел сообщений об утечках. Это почти весь код JFace, который является одной из немногих областей, которые на самом деле не изменились. –

ответ

0

Это сообщение в ответ на комментарий greg-449 выше.

Я хочу опубликовать скриншот профилирования Eclipse Neon. То, что вы видите ниже, является счетчиком экземпляров org.eclipse.jface.action.ActionContributionItem в запуске экземпляра Eclipse. Там, где наклон идет вверх, я делаю щелчки правой кнопкой мыши в редакторе исходного кода, показывающем выпадающее контекстное меню. Каждый щелчок правой кнопкой мыши оставляет за собой пожертвованные элементы. Те никогда не получат GC'ed. Если один клик длиннее, JVM просто умрет без кучи слева.

enter image description here

Это именно то, что происходит в моей RCP приложения с фрагментом кода, показанного в этом вопросе. Мои пункты вклада относятся к гораздо более тяжелым объектам, которые приносят JVM намного быстрее. Сейчас я ищу какое-то решение, чтобы остановить утечку.

 Смежные вопросы

  • Нет связанных вопросов^_^