Buongiorno a tutti,
ho un dubbio su un programmino che ho fatto, che altro non è che un orologio.
In pratica, ogni 50 millesimi di secondo (almeno teoricamente) viene aggiornato l'orario, e per fare questo all'interno di un metodo viene creata una variabile di tipo GregorianCalendar (non è ovviamente un attributo della classe).
Il mio dubbio è: se viene creata una nuova istanza di GregorianCalendar 20 volte al secondo, non è che si occupi progressivamente sempre più memoria?
Oppure la memoria si "scarica" delle variabili alla fine dell'esecuzione del metodo? :master:
A me sembra di sì, guardando nel task manager di windows...
Se è vero, avete un suggerimento per risolvere?
Il codice è questo:
Grazie ciaocodice:import javax.swing.*; import java.awt.*; import java.util.*; public class Orologio extends JFrame { JLabel eti=new JLabel(); public Orologio() { setTitle("Orologio"); setVisible(true); setLocation(300,300); Dimension dim=new Dimension(185,30); getContentPane().setPreferredSize(dim); pack(); setResizable(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); add(eti); } private String DueCifre(int numero) { String src=Integer.toString(numero); String out; if(numero<10){out="0"+src;} else{out=src;} return(out); } private String data_ora() { Calendar cal=new GregorianCalendar(); int anno=cal.get(Calendar.YEAR); int mese=cal.get(Calendar.MONTH); int data=cal.get(Calendar.DAY_OF_MONTH); int ore=cal.get(Calendar.HOUR); int minuti=cal.get(Calendar.MINUTE); int secondi=cal.get(Calendar.SECOND); if(cal.get(Calendar.AM_PM)==1){ore+=12;} String sore=DueCifre(ore); String sminuti=DueCifre(minuti); String ssecondi=DueCifre(secondi); String sdata=DueCifre(data); String smese=DueCifre(mese); String sanno=Integer.toString(anno); String dataora=(" "+sore+":"+sminuti+"."+ssecondi+" "+sdata+"/"+smese+"/"+sanno); System.out.println(dataora); return(dataora); } public static void main(String[] args) { Orologio app=new Orologio(); boolean interrupted=false; while(!interrupted) { app.eti.setText(app.data_ora()); try{Thread.sleep(50);} catch(InterruptedException e){interrupted=true;} } } }![]()

Rispondi quotando
