Vous pouvez penser que dans les 15-20 minutes, j'ai demandé 4-5 questions sur le même sujet, donc j'ai besoin d'un tutoriel à ce sujet. Mais je reçois ces questions en lisant sur GC. Donc, ma question est GC appellera une méthode finalize() sur une instance seulement une fois de son cycle de vie, même si le même objet est rendu non admissible à garbage collecter dans sa méthode finalize(). Donc, je voulais savoir comment GC va savoir qu'il a exécuté sa méthode finalize() une fois avant de le récupérer pour la deuxième foisGarbage collector et la méthode finalize()
Répondre
Honnêtement, votre vie sera beaucoup mieux si vous oubliez qu'il existe finaliseurs. J'ai codé Java pendant des années et n'ai jamais eu de raison d'utiliser un finaliseur.
Ils sont lents, pas bien définis (parfois ils ne fonctionneront jamais!), Et généralement un PITA. Si vous gérez des ressources externes, faites quelque chose le long des lignes de l'interface Closeable et utilisez les blocs try {} finally {} pour les nettoyer. Sinon, essayez autant que vous le pouvez de faire confiance à la langue pour nettoyer la mémoire après elle-même.
Implémentation dépendante. On peut supposer que la VM a un bit secret sur chaque objet, ou a une table contenant des objets qui ont déjà été "finalisés". Si je devais deviner, je dirais que le dernier puisque probablement l'ensemble des objets déjà finis qui traînent toujours devrait être petit, ainsi avoir un peu sur chaque objet dans le système semble un peu inutile.
Ah vous à nouveau :)
Notez que sur le sujet de finaliseurs, si vous avez vraiment FORCE un GC en utilisant ForceGargabeCollection de JVMTI, il est précisé que:
« Cette fonction ne cause pas finaliseurs à exécuter. "
Encore une fois, vous ne voulez probablement pas vraiment le faire, mais si vous avez 2K + représentant et 5 questions sur le GC est de penser qu'il est intéressant de continuer à répéter que l'utilisation de ForceGarbageCollection de JVMTI vous pouvez vraiment FORCE une GC.
informations Autoritaire quant à la façon de forcer un GC:
http://java.sun.com/javase/6/docs/platform/jvmti/jvmti.html#ForceGarbageCollection
- 1. garbage collector .NET
- 2. Garbage Collector et Core Foundation
- 3. Garbage Collector et Core Graphics
- 4. alloca et ObjectiveC Garbage Collector
- 5. Java et exécution manuelle finalize
- 6. .NET garbage collector mystery
- 7. Garbage Collector Flash Player
- 8. Xcode: Garbage Collector Setting
- 9. android garbage collector lingo
- 10. Garbage Collector asp.net
- 11. Eclipse: bouton Garbage Collector
- 12. Calmer un garbage collector excité
- 13. C# garbage collector référence croisée
- 14. Contrôle du garbage collector de Lua5.1
- 15. iPad - prend en charge Garbage Collector?
- 16. Le garbage collector appelle-t-il Dispose()?
- 17. Crash de Webview avec Garbage Collector ON
- 18. Garbage Collector détruit les objets d'Interface Builder
- 19. Méthode Tomcat 6 finalize
- 20. Comment faire mon code Haskell utiliser Laziness et Garbage collector
- 21. La vitesse d'allocation dépend-elle du garbage collector utilisé?
- 22. Exécuter garbage collector à partir de la ligne de commande?
- 23. Bonnes utilisations de la méthode finalize()
- 24. Garbage collector qui fonctionnerait en dehors de mon application?
- 25. Est-ce que Marshal.ReleaseComObject appelle le garbage collector?
- 26. Vérifiez si l'objet peut être récupéré par le garbage collector
- 27. Performance relative du garbage collector de Garbage First (G1) de Java?
- 28. Que signifie CMS par rapport au Garbage Collector de Java?
- 29. Est-ce que l'influence du modificateur readonly sur Garbage collector?
- 30. Comment arrêter le garbage collector android? C'est possible?
Bit secret. La finalisation peut facilement être un goulot d'étranglement. –
@tackline Intéressant. Merci. –