Newsgroup: it.comp.java
Titolo: problemi memoria interfaccia con timer

Gentili Utenti,
ho dei problemi con l'occupazione della memoria da parte di un
applicazione che ho sviluppato. La memoria con il passar del tempo
cresce cresce crese fino ad esaurire quella messa a disposizione dal
sistema operativo.
L'applicazione svolge tutta una serie di controlli  (che in questo
esempio ho eliminato) ma credo di aver focalizzato il problema, che
sembra risiedere nel timer.
Esportando le classi in jar  (uso eclipse) ed eseguendo come java -jar
app.jar la memoria occupata (CTRL+ALT+CANC  applicazione java.exe)
parte da 14.600 KB e poi cresce cresce....
Da cosa puo' dipendere?
Saluti
Sal
posto il listato
<MAIN CLASS>
package inter;
public class Principale {
public static void main(String[] args) {
try {
Interfaccia2 app = new Interfaccia2();
} catch (NullPointerException e) {}
}
}
</MAIN CLASS>
<INTERFACE CLASS>
package inter;
import javax.swing.*;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
public class Interfaccia2 extends JFrame
{
JFrame f;
JLabel timeField;
int day = 0;
int mese = 0;
int anno = 0;
int h = 0;
int m = 0;
int s = 0;
Font fontlabel = new Font( "Verdana",Font.PLAIN,14);
Dimension screenSize =Toolkit.getDefaultToolkit().getScreenSize();
public Interfaccia2()
{
timeField = new JLabel("");
javax.swing.Timer t = new javax.swing.Timer(1000,
new ActionListener() {
public void actionPerformed(ActionEvent e) {
Calendar now = Calendar.getInstance();
day = now.get(Calendar.DAY_OF_MONTH);
mese = now.get(Calendar.MONTH)+1;
anno = now.get(Calendar.YEAR);
h = now.get(Calendar.HOUR_OF_DAY);
m = now.get(Calendar.MINUTE);
s = now.get(Calendar.SECOND);
timeField.setText("Data: "+ day + "-"  + mese + "-" + anno + "
Ore: "  + h + ":" + m + ":" + s);
}
});
t.start();  // Start the timer
timeField.setFont(fontlabel);
JPanel Panel_principale = new JPanel();
Panel_principale.setPreferredSize (new Dimension (screenSize.width-10,
screenSize.height-65));
Panel_principale.add (timeField);
f = new JFrame ("TK Data");
f.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
f.getContentPane().add (Panel_principale);
f.pack();
f.setVisible (true);
f.repaint();
}
}
</INTERFACE CLASS>


Ciao,
il problema della memoria che cresce, cresce, cresce è meglio
conosciuto come memory leak:)
Puoi utilizzare tool come JProfile e JProbe (e probabilmente anche il
profiler di NetBeans ma non c'ho dato mai nemmeno un'occhiata) che ti
aiutano, in maniera insostituibile, nell'individuare i "buchi neri"
della tua applicazione.
Basta creare una configurazione di run per il tuo programma dal tool
che utilizzi (dovrai rifarti alla documentazione...calcola che ci
vorrà almeno un giorno di buona lettura e di prove se non sei pratico
del tool e non conosci un po' di teoria...); il tool ti crea dei
grafici così individuerai velocemente e puntualmente i tuoi memory
leak, cioè saprai in quale punto del codice ciò avviene.
Il problema è dovuto tipicamente ad oggetti che restano appesi, non
essendo eligibili per la garbage collection.
Nella documentazione di JProfiler trovi delle sezioni che ti danno una
buona infarinatura, più o meno teorica, della questione.
Il tuo codice probabilmente è fin troppo semplice per adottare un tool
che ti porta via una giornata di prove e studio e magari è possibile
individuarlo "ad occhio". Ho dato una veloce occhiata ma onestamente
io non ci sono riuscito:P
Bye.
--
H0le

 io non ci sono riuscito:P
Magari fosse così il mio programma ha migliaia di righe, pensavo di
aver estrapolato il problema ma forse non ci sono riuscito... i
ragazzi di comp.­lang.­java.­programmer mi stanno dando una grossa
mano in questo post:
http://groups.google.it/group/comp.lang.java.programmer/browse_thread/thread/7c94d9b5e08db7a5/36c5fcecb3e63fc4?hl=it#36c5fcecb3e63fc4
grazie comunque
Sal


Ottimo. Io purtroppo non so proprio come contribuire, essendo a
digiuno di awt/swing et similia.
In bocca al lupo!!

Ciao,
Permettimi una considerazione (brusca forse, ma spero costruttiva), se il 
tuo codice originale è illegibile così come quello che hai postato, per 
forza non riesci a trovare errori.
Indenta!
Saluti,
Giuseppe


Nel mio primo post sull argomento :
http://groups.google.com/group/comp.lang.java.programmer/browse_thread/thread/c747594a7c5edeb/4942c29e6bf19795?lnk=gst&q=SSCCE+sal#4942c29e6bf19795
sono stato criticato di aver postato del codice con indentazione,
quindi in questo post l'ho eliminata, lo scopo è fornire un codice
facilmente compilabile, con l'indentazione nel caso di istruzioni
lunghe c'è il rischio di andare a capo e quindi di creare degli
errori.
Se si volesse avere un codice più leggibile, si potrebbe usare eclipse
che con Ctrl+i fornisce una corretta indentazione,
Comunque grazie dell'interessamento
saluti
Sal