【问题标题】:Out Of Memory in Codename One代号一内存不足
【发布时间】:2015-05-14 19:19:37
【问题描述】:

我的应用程序使用 SidePanel 菜单作为导航,当我显示新表单或打开侧边栏面板时,应用程序占用越来越多的内存。可能,它依赖于在 SideBar 中使用一些图像处理(将图像屏蔽为圆圈)以及大量使用 URLImage 类来下载图像。但很可能是因为我没有释放之前表单的内存。

我怎样才能释放这段内存?

换表代码:

public void showForm(FormBuilder form) {
    if ( current == null ||
         ( ! form.getForm().getTitle().equals(current.getTitle()) )
    ) {
        current = form.getForm();
        if (!(form instanceof splash)) {
            try {
                sideMenu.addMenu(current);
            } catch (IOException ex) {

            }
        }
        current.show();
    }
}

void sideMenu.addMenu(Form form); - 将 SideBar 菜单添加到表单的静态函数。

【问题讨论】:

    标签: memory memory-leaks out-of-memory codenameone


    【解决方案1】:

    以前的表单“应该”被 GC'd。但是,如果您引用了前一个表单中的一个元素,则将保留整个表单及其所有内容。这是因为每个组件都有对其父级的引用,一直到父窗体。

    您可以使用 NetBeans 内存分析器等工具以及 NetBeans 中的 performance profiler 工具来跟踪内存使用情况。图像遮罩有点贵,但如果您使用内置于 URLImage 中的遮罩,所有内存开销都会被 GC 处理,因此应该不是问题。

    【讨论】:

    • 这个工具有很多麻烦。如果我调用性能或网络监视器 - 我的应用程序的模拟窗口可能不可点击。反之亦然 - 模拟器工作正常,但监视器不可点击。但是,性能监视器向我显示了此内存溢出,而我无法理解其他任何内容。
    • 窗口不应该阻止点击能力,它总是在顶部但不是模态的。您在哪个 OS/Java 版本上遇到此问题?
    • Linux 3.13.0-45-generic #74-Ubuntu SMP Tue Jan 13 19:36:28 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
    • java version "1.7.0_75" OpenJDK Runtime Environment (IcedTea 2.5.4) (7u75-2.5.4-1~trusty1) OpenJDK 64-Bit Server VM (build 24.75-b04, mixed mode)
    • Gnome 端口可能没有正确实现 AWT on top API。啊。我不确定我们如何才能正确地解决这个问题。您是否尝试过 netbeans 内存分析器?它应该指出持有哪个对象以及对它的引用保存在哪里。
    猜你喜欢
    • 1970-01-01
    • 2017-10-05
    • 1970-01-01
    • 2014-10-15
    • 2015-11-11
    • 1970-01-01
    • 2011-05-21
    • 2015-03-11
    • 1970-01-01
    相关资源
    最近更新 更多