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

    Conta oggetti

    Scritta la classe, mi piacerebbe sapere quanti oggetti sono allocati.

    come posso fare (tenendo conto anche di quelli deallocati dal garbage collector)?
    Forza e onore

  2. #2
    una variabile statica all'interno della classe che viene incrementata quando si chiama il costruttore della classe.
    Per decrementare implementi un distruttore... dovresti se non sbaglio fare l'override del metodo finalize(), ma non vorrei sbalgiare.

    ciao ciao

  3. #3
    Ehm, in effetti è quella la mia difficoltà, contare quelli deallocati...

    Grazie cmq.
    Forza e onore

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    230
    Ciao Premeier,

    probabilmente il tuo problema nel contare oggetti deallocati è vincolato al fatto che il Garbage collector decide se deallocare o meno gli oggetti che fanno parte o meno di uno o più thread e penso che questo capiti anche se tu invochi il metodo finalize in maniera esplicita nel tuo listato.

    Allora un'idea sarebbe quella di avere sempre la variabile statica per il conteggio, fare l'override del metodo finalize aggiungendo il decremento di detta variabile e poi invocare direttamente il garbage collector.
    Per invocare il garbage collector può esserti utile:

    http://www.devdaily.com/java/edu/pj/...08/index.shtml

    Sinceramente non so se il mio suggerimento può aiutarti a risolvere il tuo problema
    Ciao

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Ecco un esempio di utilizzo di finalize():
    codice:
    public class Prova
    {
        public static void main (String[] args)
        {
            MyObj o1 = new MyObj ();
            MyObj o2 = new MyObj ();
            MyObj o3 = new MyObj ();
    
            System.out.println (MyObj.getCount ());
    
            o1 = null;
            System.gc ();
    
            System.out.println (MyObj.getCount ());
    
            o2 = o3 = null;
            System.gc ();
    
            System.out.println (MyObj.getCount ());
        }
    }
    
    class MyObj
    {
        private static int count;
    
        public MyObj ()
        {
            count++;
        }
    
        protected void finalize ()
        {
            count--;
        }
    
        public static int getCount ()
        {
            return count;
        }
    }
    Notare che finalize è protected (ed è giusto che sia così) e notare che System.gc() è solo un "suggerimento" per la JVM.

    In realtà ci sarebbero molte altre cose che si possono fare ma qui si entrerebbe in un argomento molto più complesso. In Java un oggetto si può trovare in uno dei seguenti 6 stati:
    - reachable
    - unreachable
    - resurrectable
    - softly-reachable
    - weakly-reachable
    - phantomly-reachable
    I primi 3 stati esistono in Java da sempre, gli ultimi 3 sono stati introdotti con Java 1.2. Mentre per i primi 3 stati il programmatore ha solo un controllo parziale su di essi, per i 3 stati aggiuntivi il programmatore ha un controllo completo. È così possibile, ad esempio, implementare un sistema di "caching" degli oggetti o altre cose.
    Ma qui, ripeto, si va verso cose un pochino più complesse ....
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.