Аз правя заявление и проследявам използването на паметта му. Паметта на приложението е около 58 676 К, както се вижда по-долу.
Това е моят GUI.
Този бутон за затваряне има функция, която прави този панел невидим.
private final ActionListener closeButtonAL = new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
timeUtilities.getPanel().setVisible(false);
}
};
Имам и бутон, който прави панела видим отново.
private final ActionListener showPanelAL = new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
timeUtilities.getPanel().setVisible(true);
}
};
Панелът е инициализиран още преди приложението да започне да се показва.
Проблемът ми е, че само с GUI се появява и затваря отново и отново увеличава паметта на приложението.
Не е ли това някакво изтичане на памет? Независимо от отговора, как да предотвратя този въпрос?
Отговори:
1 за отговор № 1Трябва да използвате профилиращо устройство, за да откриете изтичането на паметта.
В NetBeans най-отгоре до бутоните "Run Project" и "Debug Project" е бутон "Профил на проекта" (Alt-F2).
Първо пуснете, той може да ви помоли да калибрирате или нещо такова.
Afterwars, можете да изберете да анализирате CPU или Memory. Ако кликнете върху Памет, маркирайте "Обикновено" и щракнете върху Изпълни, можете да стартирате проекта си и да видите какво използва паметта.
1 за отговор № 2
Не, това не може да е знак за изтичане на паметта. Защото, когато затворите и отворите GUI няколко пъти, приложението ви може да създава и отхвърля някои обекти. Но JVM може и да няма събрани боклуци. Ако искате реалната картина да използвате инструмент за профилиране. Вземете купчини сметища с течение на времето след като GC работи. Това ще ви каже какво още остава в паметта.
Това може да ви помогне да стесните вашия лов за възможно изтичане на паметта.
Най-прости инструменти за профилиране.
- Netbeans идва с вграден профил.
- Jconsole също може да помогне малко
- VisualVm също може да помогне малко.
Също така вижте тази връзка как да анализирате heapdumps