Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    Domanda su ripetizione metodo

    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

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802

    Re: Domanda su ripetizione metodo

    Originariamente inviato da furbostandby
    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:
    In Java gli oggetti non utilizzati non vengono subito rimossi dalla memoria: l'operazione viene effettuata "ogni tanto" dal garbage collector, quando serve.
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    Capito, grazie mille!!!

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Aggiungo a quanto gisutamente detto da Alex che è possibile chiamare il metodo gc() di System per invocare l'operazione di Garbace Collector.

    Ecco il metodo: http://download.oracle.com/javase/1.....html#gc%28%29

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.