e4 RCP应用程序,菜单中的ActionContributionItem泄漏

时间:2016-09-22 19:15:47

标签: eclipse-rcp rcp e4

以下适用于Eclipse 3.7 RCP应用程序 - 在表格行中单击时会弹出一个弹出菜单。

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);
}

当它在e4(霓虹灯,最新更新)中运行时,ActionContributionItem实例中没有任何一个获得GC,当有许多项目时,每个实例都会引用一些其他对象,从而产生相当大的泄漏。

我在e4做错了吗?

1 个答案:

答案 0 :(得分:0)

这是对上面greg-449评论的回应。

我想发布截图分析Eclipse Neon本身。您在下面看到的是运行Eclipse实例中org.eclipse.jface.action.ActionContributionItem实例的计数器。斜率上升的地方是我在源代码编辑器中右键单击显示下拉上下文菜单。每次单击右键都会留下孤立的贡献项。这些将永远不会得到GC。如果一次点击更长时间,JVM就会死掉而没有剩下的堆。

enter image description here

这正是我的RCP应用程序中使用问题中显示的代码段所发生的情况。我的贡献项是指更重的对象,它们使JVM的速度下降得更快。现在我正在寻找一些解决方案来阻止泄漏。