Si un objet possède 5 références, cet objet peut-il trouver ce qui lui est référencé? Parce que je sais que Java (et j'espère que C#
) en a une liste pour le GC.qui me connaît? (Chroniques d'un objet)
Répondre
Non, il n'y a pas de "liste de références". Le GC n'a pas besoin de savoir tout ce qui fait référence à un objet - il doit simplement savoir si quoi que ce soit fait référence à un objet. Comme un modèle très grossier de ce que le GC fait, il marque chaque objet dans le tas comme de la foutaise, puis regarde les objets qu'il sait pour être non-ordures (objets "root").Par exemple, il va regarder la pile de chaque thread et pour chaque méthode d'instance dans le thread, il généralement marquer l'instance cible comme non-garbage.
Ensuite, il va passer par chacune de ces racines, et voir quels objets ceux se réfèrent à ... et les marquer comme non-ordures. Il va se rhabiller, trouver tout ce qu'il peut. Tout ce qui n'a pas été marqué comme non-déchet peut alors être collecté (ou finalisé).
Comme vous pouvez le voir à partir de cet algorithme, le GC n'a pas besoin de garder une liste complète de références pour chaque objet - juste un peu pour dire "garbage" ou "non-garbage". En réalité, le GC est beaucoup plus compliqué que cela, en Java et .NET, avec génératrice garbage collectors et diverses stratégies pour minimiser la "pause" GC et utiliser plusieurs threads pour GC. Espérons que cette vue simplifiée est suffisante pour expliquer pourquoi même le GC n'a pas de liste de références.
Pas toujours, dans le cas de .NET. Un objet peut être collecté alors qu'une méthode d'instance est encore en cours d'exécution "in", si cette méthode ne fait référence à aucun champ de l'objet à partir du point actuel.
Si vous ne parvenez pas à trouver la prise en charge de la langue pour cela, il suffit que chaque objet qui veut contenir une référence à l'objet en question appelle une méthode qui indique à l'objet en question qu'il est référencé. Cet objet ajouterait alors l'objet référent à une liste. Chaque fois que vous abandonnez votre référence à cet objet, vous appelez une autre méthode qui supprimerait le référent de la liste.
- 1. Recherche d'un objet .NET ObjectReflector qui me permettra de simplifier la réflexion d'un objet
- 2. Quelqu'un connaît une bibliothèque de rubis qui fonctionne comme Lisibilité?
- 3. Qui connaît AppWeb HTTP Server et son PHP embarqué?
- 4. Problème de liaison qui me rend fou
- 5. Erreur PHP qui me rend fou
- 6. Django's IGNORABLE_404_ENDS ... qu'est-ce qui me manque?
- 7. Qu'est-ce qui me manque dans IIS7?
- 8. ZXing embarqué - qu'est-ce qui me manque?
- 9. Qu'est-ce qui me manque? : IPhone Objective-C nsInputStream initWithData
- 10. classe ne me laisse pas créer un nouvel objet
- 11. Quelqu'un connaît-il un exemple de code .NET OpenID Provider qui pourrait exister?
- 12. MongoMapper ne me laisse pas créer un objet
- 13. validates_confirmation_of Rails me empêchant de sauver un nouvel objet
- 14. Spring MVC 3.0: Comment me lier à un objet persistant?
- 15. Impossible d'accéder à un objet JSON que je me attends
- 16. Quelqu'un connaît un bon générateur de script sql freeware?
- 17. Besoin d'un composant/bibliothèque qui me permet d'exporter vers PSD (Adobe Photoshop)
- 18. boucle à travers un objet qui contient un objet php
- 19. Qu'est-ce qui me manque avec Entity Framework?
- 20. ckEditor et jQuery qu'est-ce qui me manque?
- 21. JQuery Valider avec addClassRules: Qu'est-ce qui me manque?
- 22. Dois-je me débarrasser des robots qui visitent mon site?
- 23. quelqu'un peut-il me dire ce qui se passe ici?
- 24. configuration apache - qu'est-ce qui me manque ici?
- 25. Flash et SEO: qu'est-ce qui me manque?
- 26. Zend Date qui me donne des zéros, pourquoi?
- 27. Bizarre problème zend fw qui me rend fou!
- 28. Glisser et déposer du texte - Qu'est-ce qui me manque?
- 29. Outil qui me montre quels fichiers sont écrits sous Linux?
- 30. Qu'est-ce qui me manque dans cette connexion?
Cela devient rapidement viral ... parce que maintenant un objet a besoin de savoir quand il va être recueilli, afin qu'il puisse se retirer. Vous finissez avec tout avoir un finaliseur, ou * masses * de code partout pour effectuer le ménage. –
c'est ce que j'essaie d'éviter! ça va devenir lourd! im planing un modèle avec et expectancy pour 10000 objet avec quelques liens entre eux. si mal il suffit de garder la liste sur eux cela peut être un surcoût de 100000 à un millier de références – kalix
@kalix: Ensuite, vous devez redessiner de sorte que vous n'avez pas besoin de connaître les "parents". –