Si j'utilise le GC stop-the-world et que je fais des choses dans ma méthode finalize()
, puis-je supposer que tous les threads sont suspendus et que je peux faire ce que je veux et aucun thread n'osera moi sauf le fil du GC?Utilisation de la finalisation comme verrou exclusif
Répondre
Non, en fait, il peut même être plusieurs threads de finaliseur en cours d'exécution simultanément.
Depuis le java language spec, "Les finaliseurs peuvent être appelés dans n'importe quel ordre, ou même simultanément."
Non, vous ne pouvez pas - au moins autant que je comprends la mise en œuvre du point d'accès:
Au moins, c'est comment cela fonctionne avec un balayage marque & gc, mais je suis sûr qu'il est semblable à toutes les autres implémentations ainsi:
Après la phase de balayage, chaque objet finalisé non marqué est ajouté à une liste de travail avec son jeu de bits de marquage.
Ensuite, un agent d'arrière-plan parcourt cette liste et, après avoir terminé avec un appel de finalisation, efface le bit de marque afin qu'il soit effacé par le GC suivant. En conséquence, vous ne pouvez pas faire de suppositions sur QUAND la méthode finalize sera appelée (en fait, puisque le thread d'arrière-plan est probablement arrêté, vous pouvez être sûr que ce n'est pas lors d'une exécution GC!).
Maintenant, c'est un détail de mise en œuvre pour Hotspot et peut même varier entre les différentes implémentations de GC ..
- 1. Le verrou exclusif PostgreSQL arrête l'application
- 2. Verrou exclusif de file d'attente de transmission IBM MQ
- 3. SQL multiple exclusif comme
- 4. ne peut pas obtenir le verrou exclusif sur le fichier
- 5. os.O_EXLOCK (verrou exclusif) n'existe pas en Python sous Linux
- 6. Pourquoi InnoDB CREATE ... SELECT utilise-t-il un verrou exclusif?
- 7. Pourquoi ne puis-je pas acquérir un verrou exclusif?
- 8. insert exclusif de verrouillage
- 9. mysql: exclusif sélectionnez comme SQS?
- 10. Utilisation de Control.Invoke() à la place du verrou (Control)
- 11. Propriété statique et verrou Utilisation
- 12. T-SQL C# comme verrou
- 13. NHibernate: verrouillage exclusif
- 14. Utilisation de verrou dans OpenMP et Pthreads
- 15. Utilisation de la colonne SQL dB comme verrou pour les opérations simultanées dans Entity Framework
- 16. Utilisation d'une chaîne comme verrou pour effectuer la synchronisation de threads
- 17. Verrou IS (intentionnel partagé)
- 18. Comment obtenir un verrou exclusif de processus sur un dossier dans Windows?
- 19. Finalisation de WebPreferences dans Twiki
- 20. IOS animation finalisation
- 21. Verrouillage exclusif SQL Server 2000
- 22. Utilisation de JMS en tant que gestionnaire de verrou distribué?
- 23. d'erreur Finalisation du curseur
- 24. démarrage de démarrage exclusif
- 25. Utilisation de verrou (obj) dans un appel récursif
- 26. C++ erreurs de finalisation de l'algorithme Floodfill
- 27. problèmes avec la finalisation du formulaire de facture de vente
- 28. WPF C# DataBinding Liste Finalisation
- 29. Verrou avec petit overhead ou sans verrou
- 30. Différence entre verrou (verrou) et verrouillage (variable_qui_utilise_I_am_using)
* "aucun thread n'osera rivaliser" * - Je peux juste imaginer les pauvres petits threads d'applications qui tremblent dans le coin, en attendant que le gros et méchant vieux thread GC finisse :-) –