在Codename One中记忆犹新

时间:2015-03-12 14:55:34

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

我的应用程序使用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(表单表单); - 用于添加SideBar菜单的静态函数。

1 个答案:

答案 0 :(得分:1)

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

您可以使用NetBeans内存分析器等工具以及NetBeans中的performance profiler工具来跟踪内存使用情况。图像屏蔽有点贵,但是如果你使用URLImage中内置的那个,所有的内存开销都是GC的,所以它应该不是问题。