Недостаточно памяти в кодовом названии один
Мое приложение использовало меню 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, так что это не должно быть проблемой.