Недостаточно памяти в кодовом названии один

Мое приложение использовало меню 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 ответ

Предыдущие формы "должны" быть GC'd. Однако, если у вас есть ссылка на один элемент в предыдущей форме, вся форма и все ее содержимое будут сохранены. Это потому, что каждый компонент имеет ссылку на своего родителя вплоть до родительской формы.

Вы можете использовать такие инструменты, как профилировщик памяти NetBeans, а также наш инструмент профилирования производительности в NetBeans для отслеживания использования памяти. Маскировка изображений стоит немного дороже, но если вы использовали тот, который встроен в URLImage все накладные расходы памяти - это GC'd, так что это не должно быть проблемой.

Другие вопросы по тегам