Quelle est la différence entre le Système.gc() et la méthode finalize() en java?
Je suis confondre entre le système.gc() et la méthode finalize() de java.
On ne peut pas forcer pour ramasser les débris de l'objet de la JVM. Nous sommes permettre d'écrire les deux méthodes dans notre code java et si les deux sont utilisés pour la collecte des ordures, alors quel est le point dans la fourniture de deux méthodes pour la collecte des ordures par java?
S'il vous plaît dites-moi la précision des deux méthodes et à l'intérieur comment cela fonctionne?
avez-vous même de lire la javadoc ou regarder les autres questions?
Les méthodes ont peu à voir les uns avec les autres. On n'appelle pas les autres et qu'ils ont des objectifs complètement différents.
Les méthodes ont peu à voir les uns avec les autres. On n'appelle pas les autres et qu'ils ont des objectifs complètement différents.
OriginalL'auteur sayali | 2012-04-17
Vous devez vous connecter pour publier un commentaire.
System.gc()
gentiment demande au système d'effectuer une collecte des ordures. Javadoc dit:Vous ne pouvez pas contrôler la façon dont "dur" le garbage collector de travail. Comment le garbage collector de travail à l'interne, VM-spécifique et un sujet de recherche sur son propre. Mais il y a généralement "plein" la collecte des ordures et quelques petits "augmentation" de la collection en cours. Considérez donc
System.gc
comme une demande, mais il n'y a pas de garanties que la collecte des ordures de votre objet va se passer.Object.finalize()
peut être remplacé à préciser que faire lorsqu'un objet donné est des ordures collectées (en fait, de quoi faire juste avant d'ordures collectées). Javadoc dit:Classique de l'utilisation de l'outil de finalisation sont de répartir les ressources du système lorsqu'un objet est des ordures collectées, par exemple, la libération des descripteurs de fichiers, les fichiers temporaires, etc.
Ne pas utiliser d'outil de finalisation pour effectuer des actions lorsque la JVM sorties. Pour ce faire, utiliser un crochet d'arrêt que vous vous inscrivez avec
Runtime.getRuntime().addShutdownHook(Thread)
.System.gc()
. Il fonctionnera de la même si vous faites l'appel rudement 🙂merci beaucoup
Ouais 🙂 Ce que je voulais dire, c'est que l'on dépend de la bonté fo le garbage collector récupérer de l'espace, comme l'exigeait: "la Machine Virtuelle Java a fait mieux pour récupérer de l'espace de tous les objets jetés". Vous ne pouvez pas contrôler la façon dont dur elle a essayé 🙂
OriginalL'auteur ewernli
System.gc()
forces le garbage collector de courir, alors que laFinalize()
méthode de votre objet définit ce que le garbage collector devrait le faire lors de la collecte de cet objet spécifique.En gros, c'est comme ceci:
System.gc()
n'a absolument pas la force de GC pour l'exécuter. Il informe uniquement GC que l'application veut GC à exécuter, mais il n'y a aucune garantie que quelque chose va se passer.OriginalL'auteur penartur
system.gc()
méthode avertit la JVM que le garbage collector peut exécuter maintenant pour effacer la mémoire en supprimant des objets inutilisés. Conformément à la java doc:finalize()
méthode ne permet pas de déclencher le garbage collector au lieu de cela il sera appelée lors de la collecte des déchets sur la destruction de l'objet. Il fournit les instructions pour effacer l'objet correctement.OriginalL'auteur vinothM
le Système.gc() la méthode des ordures collecte les objets qui sont créés par le nouveau mot-clé, alors que le finaliser() la méthode est utilisée lorsque l'on veut ordures collecter les objets qui ne sont pas créés à l'aide de mot-clé new. Donc, je crois que ce ans. votre Q
OriginalL'auteur learner
La collecte des ordures est utilisé pour récupérer de la mémoire allouée de l'objet et
Finalize()
est appelé par le garbage collector avant de récupérer de la mémoireFinalize()
méthode principalement utilisé pour faire l'opération avant la suppression de l'objetOriginalL'auteur swan
Il y a beaucoup de classes qui contiennent la méthode finalize (), je vais supposer que vous voulez dire celui dans la classe de l'Objet. Système.gc() est ce que vous appelez quand vous voulez Java ordures compilateur à exécuter. Il sera exécuté par lui-même toutes les quelques minutes, mais vous pouvez lui demander d'aller quand vous le voulez. Lorsque le gargabe collector s'exécute, il appelle la méthode finalize() de chaque objet qui n'a plus de référence. Fondamentalement, Le Système.gc() nettoie la mémoire, et utilise finalize() pour se débarrasser des objets individuels.
OriginalL'auteur Jainendra
Les réponses ici sont grands, je voulais juste élaborés petit point sur la méthode finalize (): il ne faut jamais l'utiliser.
C'est l'exécution n'est pas garanti à tous et, finalement, la l'utilisation de finalize() ajoute de la performance.
Comme écrit dans l'efficacité de Java par Joshua Bloch:
Et:
Préférez l'utilisation de la ressource suivant la résiliation de try-finally modèle, qui sont garantis à exécuter:
OriginalL'auteur Stas
Garbage collector est invoquée par l'appel de la
System.gc()
méthode à n'importe quel classe. Mais il n'est pas garantit que toutes les annulé objets seront nettoyés avant la jvm s'arrête. Donc, fondamentalement,gc()
méthode est des ordures collecte uniquement les objets qui sont créés à l'aide de mot-clé new. Les objets sont créés par toute autre logique que ce sera nettoyée en appelant explicitementfinalize()
méthode avant degc
appelle le garbage collector.OriginalL'auteur Hemant