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:
codice:
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;}
		}
	}
}
Grazie ciao