Pourquoi est-finaliser pas appelée?

J'ai quelques questions concernant le garbage collector de java.

T1.Comme je le comprends, finalize() est appelée lorsque l'objet est en dehors de la portée et de la JVM est sur le point de ramasser les ordures. J'ai pensé méthode finalize() est appelée automatiquement par le garbage collector, mais il ne paraît pas fonctionner dans ce cas. Quelle est l'explication? Pourquoi le besoin de m'appeler explicitement méthode finalize ()?

public class MultipleConstruct {
    int x,y;    
    public MultipleConstruct(int x)
    {
        this.x= x;
        y=5;        
        System.out.println("ONE");
    }

    @Override
    protected void finalize() throws Throwable {
        //TODO Auto-generated method stub
        super.finalize();
        System.out.println("FINALIZED");
    }
    public static void main(String[] args) throws Throwable {
        MultipleConstruct construct = new MultipleConstruct(3);
    }
}

T2. Aussi, lorsque le garbage collector invoquée? Je comprends gc est un fil de démon et invoqué par la JVM en fonction de la taille du segment restant. Est-ce à dire, JVM attend pour le programme à utiliser seuil de ressources et d'en notifier le gc pour balayer les ordures des objets.

EDIT: Comment gc résolu références circulaires?

GC est effectué chaque fois que la JVM pense qu'il doit l'appeler, bien que l'IIRC l'Oracle de la JVM sera fait appel par un Système.gc (). Autant que je me souvienne c'est aussi de ne pas être appelé. Pour votre exemple, comment faites-vous tester pour voir si/quand on l'appelle?
N'utilisez pas finalize (), il n'est en aucune façon l'équivalent d'un destructeur C++.
je suis d'accord, mais alors ce que pourrait être une façon de mettre en œuvre destructeur comme le comportement en java je.e sans bug ressources de nettoyage.
Utiliser try {} finally {} blocs de bug ressource gratuite de nettoyage.
ce n'est pas la solution dans des cas tels que u ont de la peinture de la méthode dans un objet qui a attiré l'image sur l'écran, et maintenant il est hors de portée, mais l'image est toujours visible sur l'écran. U besoin d'un destructeur qui va permettre de nettoyer l'image sur l'écran. n'est-ce pas?

OriginalL'auteur prap19 | 2011-10-16