【问题标题】:e4 RCP application, ActionContributionItem leak in menuse4 RCP 应用程序,菜单中的 ActionContributionItem 泄漏
【发布时间】:2016-09-22 19:15:47
【问题描述】:

以下适用于 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(Neon,最新更新)中运行时,没有一个 ActionContributionItem 实例得到 GC'ed,当有许多项目每个都持有对其他对象的引用时,这会造成相当大的泄漏。

我在 e4 中做错了吗?

【问题讨论】:

  • 这不是 e4。您有一个在 Eclipse 4 上运行的 3.x 兼容模式应用程序。
  • 好的。它是在 e4 目标中运行的 e3 应用程序。你知道如何阻止泄漏吗?
  • 这样的代码在 Eclipse 中到处都是,我还没有看到任何泄漏的报告。这几乎是所有 JFace 代码,是少数没有真正改变的领域之一。
  • 这里有类似问题的报告:bugs.eclipse.org/bugs/show_bug.cgi?id=435274我现在正在使用分析器,每次右键单击我都会获得 ActionContributionItem 的增长计数。
  • 该错误已在 4.4.2 中修复

标签: eclipse-rcp rcp e4


【解决方案1】:

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

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

这正是问题中显示的代码 sn-p 在我的 RCP 应用程序中发生的情况。我的贡献项是指更重的对象,它们会使 JVM 更快地崩溃。现在我正在寻找一些解决方案来阻止泄漏。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-06
    相关资源
    最近更新 更多