Mam teorię, że mechanizm zbierania śmieci CLR oznacza, że mogę uciec z odwołaniami cyklicznymi w hierarchii obiektów bez tworzenia zakleszczeń do usuwania i usuwania śmieci. Czy to bezpieczne założenie? (Język docelowy VB.NET)Czy metoda zbierania śmieci CLR oznacza, że można bezpiecznie rzucać odwołania do obiektów kołowych?
Odpowiedz
Śmieciarka .NET to generacyjny znak i moduł zbierający. Nie korzysta z liczenia odwołań. Więc tak, bezpiecznie mieć referencje kołowe. Język nie ma znaczenia
Po prostu bądź bardzo ostrożny, aby uniknąć przekazywania odniesienia do statycznego, a także pamiętaj, że delegaci będą traktowali jako odniesienie do obiektu, w którym są zaimplementowani. bardzo łatwe do utrzymania rzeczy przy życiu, takie jak statyczna lista zdarzeń zdarzenia. – morechilli
Zgodnie z tym artykułem: https://web.archive.org/web/1/http://articles.techrepublic%2ecom%2ecom/5100-10878_11-5109829.html
Circular odniesienia to problem, który pojawia się, gdy nie są dwa obiekty, które odnoszą się do każdej nawzajem. Załóżmy, że masz klasę A, która odnosi się do klasy B. Jeśli klasa B również odnosi się do klasy A, to mamy odniesienie kołowe w postaci . Zdarza się to w wielu sytuacjach. Typowym przykładem dla jest stosunek między rodzicem a dzieckiem, w którym dziecko współdziała z obiektem macierzystym, a również zawiera odniesienie do obiektu nadrzędnego . Może to prowadzić do tego, że obiekty nie zostaną oczyszczone, dopóki aplikacja nie zostanie zamknięta. Sposób wywoływania śmieci w trybie .NET rozwiązuje problem z okrągłym numerem referencyjnym , ponieważ moduł czyszczenia pamięci może wyczyścić dowolny obiekt, który jest dostępny z poziomu katalogu głównego.
EDIT:
Sądząc z tego postu: http://blogs.msdn.com/abhinaba/archive/2009/01/27/back-to-basics-reference-counting-garbage-collection.aspx wydaje się, że zbieranie śmieci .NET nie opiera się na liczeniu odniesienia do zbierania śmieci.
Kolejny artykuł warto przeczytać (garbage collection wyjaśnia szczegółowo) jest to jedno: http://www.simple-talk.com/dotnet/.net-framework/understanding-garbage-collection-in-.net/
"NIE można uzyskać z poziomu root'a" –
- 1. Obiekty kwalifikujące się do zbierania śmieci
- 2. Metoda klasy modeli szyn do zbierania obiektów
- 3. Czas zbierania śmieci Java?
- 4. podłańcuchy i urządzenie do zbierania śmieci Go
- 5. Algorytm zbierania śmieci JVM
- 6. Niezwykle długie czasy zbierania śmieci
- 7. Narzędzie do zbierania śmieci dla dalvik
- 8. Czy gcc 4.8.1 ma obsługę C++ 11 do zbierania śmieci?
- 9. Czy Objective-C ma moduł do zbierania śmieci na iPhonie?
- 10. Podsumowanie ostatniej dekady zbierania śmieci?
- 11. Dlaczego wydaje mi się, że wyciek pamięci występuje podczas zbierania śmieci "Serwer" użytkownika?
- 12. Czy język nieinterpretowany może zawierać narzędzie do zbierania śmieci?
- 13. Kiedy w ExecutorService można pobierać działające śmieci obiektów?
- 14. Jakie są "precyzyjne" algorytmy zbierania śmieci?
- 15. Zatrzymywanie zbierania śmieci dla niezarządzanego delegata
- 16. Czy powinniśmy używać "śmieci" do zbierania śmieci "stacji roboczej" lub "serwera"?
- 17. Odświeżenie przeglądarki nie powoduje zbierania śmieci
- 18. Czy ten obiekt java kwalifikuje się do zbierania śmieci na liście
- 19. Śledź wszystkie odwołania do obiektów w języku C#
- 20. Dostęp do obiektów zagnieżdżonych JavaScript bezpiecznie
- 21. wyjątek scbl Sterty wyczerpane podczas zbierania śmieci
- 22. W którym miejscu jest dokładnie dostępny obiekt do zbierania śmieci?
- 23. Czy zbierania śmieci Objective-C 2.0 zbierać struktury C?
- 24. Czy można bezpiecznie przechodzić „argumenty” do „apply()”
- 25. Czy można bezpiecznie przypisać wartość nullptr do zmiennej wskaźnika funkcji?
- 26. Jakie algorytmy zbierania śmieci wykorzystują wszystkie 5 głównych przeglądarek?
- 27. Czy można bezpiecznie założyć wartość liczbową DayOfWeek?
- 28. Czy można bezpiecznie używać XMLDecoder do odczytu plików dokumentów?
- 29. Nie można rzucać projektu Eclipse do IJavaProject
- 30. Czy są jakieś potencjometry odwołujące się do Pythona/wątki zbierania śmieci podczas pracy z kodem C?
Zobacz tutaj podobne pytanie z bardzo dobrej odpowiedzi przyjętą http://stackoverflow.com/questions/400706/circular-references -cause-memory-leak –
@David: AZ powiedział, że _nie używa liczenia odwołań. –
@Johannes: To był błąd w moim komentarzu, miałem na myśli pytanie (a nie odpowiedź), początkowe pytanie brzmiało, czy użycie referencyjnego liczenia w CLR sprawiło, że cykle były niebezpieczne. Pytanie (nie odpowiedź AZ) było błędne w kwestii tego, w jaki sposób CLR wykonuje GC. –