Jeśli na stosie znajdują się dwa obiekty, ale nie łączą się one z żadną zmienną referencyjną, to czy są to obiekty kwalifikujące się do zbierania śmieci?Zachowanie podczas odśmiecania z odizolowanymi odwołaniami cyklicznymi?
Odpowiedz
Tak, są. Zasadniczo GC przechodzi od "znanych źródeł" (zmiennych statycznych, zmiennych lokalnych ze wszystkich ramek stosów w wątkach alll), aby znaleźć obiekty, które nie mogą być zbędne. Jeśli nie można uzyskać dostępu do obiektu z katalogu głównego, może on zostać odebrany.
EDIT: Tom wskazał na to, co uważałem, że było warto podnoszenia do samej odpowiedzi:
Technicznie, zmienne statyczne nie są korzenie - są one odwołuje klas których odwołuje ładowarki klasy do których odwołują się klasy, do których odwołuje się obiekt, który jest oznaczony przez odwołania do katalogu głównego.
Różnica może być nieistotny najbardziej czasu, ale dobrze jest wiedzieć :)
Sprawdź to: How does Java Garbage Collector Handle Self References.
Możesz sprawdzić java.lang.ref.WeakReference
Skeet jest na pieniądze, jak zwykle. Dodam tylko, że sytuacja, którą opisujesz, jest powodem, że liczenie odwołań (standardowa strategia z wczesnymi wskaźnikami inteligentnymi C++) nie jest używane.
- 1. Jak serializować jako Json strukturę obiektu z odwołaniami cyklicznymi?
- 2. Rozdzielczość przeciążeniowa z odwołaniami uniwersalnymi
- 3. Odmienne zachowanie podczas odlewania
- 4. Biblioteka klas z odwołaniami do usług
- 5. Operacja xor między odwołaniami java
- 6. Dziwne zachowanie podczas animowania UITextField
- 7. Prawdopodobnie niespójne zachowanie podczas odlewania
- 8. Jak radzić sobie z odwołaniami JWT z MQTT
- 9. C# WebBrowser HTML z odwołaniami do skryptów i obrazów
- 10. Jak radzić sobie z odwołaniami do pliku VB6 .vbp zmieniając
- 11. Jak załadować zespół do aplikacji AppDomain z rekurencyjnie wszystkimi odwołaniami?
- 12. Async Web Api Controller - Jak radzić sobie z odwołaniami?
- 13. Odd OpenGL zachowanie podczas rysowania sześcian
- 14. Zachowanie podczas zmniejszania liczby wystąpień aplikacji Bluemix
- 15. Niespójne zachowanie podczas anulowania różnych rodzajów Asyncs
- 16. dziwne zachowanie podczas korzystania z listy inicjalizatora w języku C++
- 17. Inne zachowanie podczas uruchamiania RFT z linii poleceń
- 18. Ciąg C++ - dziwne zachowanie podczas korzystania z konstruktora listy inicjowania
- 19. Dziwne zachowanie podczas konwersji łańcuchów C do/z podwójnych
- 20. Dziwne zachowanie się cienia podczas odwracania karty
- 21. Dziwne zachowanie z FileStream.WriteFile
- 22. Niechciane zachowanie z dict.fromkeys
- 23. Nieoczekiwane zachowanie z implicits
- 24. Zachowanie protokołów z Self
- 25. Niestandardowe zachowanie CoordinatorLayout z AppBarLayout
- 26. Nieoczekiwane zachowanie z przeciążonych metod
- 27. Dziwne zachowanie Console.ReadKey() z wielowątkowością
- 28. Niezdefiniowane zachowanie z odlewaniem typu?
- 29. dziwne zachowanie javascript z tablicami
- 30. Dziwne zachowanie z String.to_integer/1
Technicznie, zmienne statyczne nie są źródłami podstawowymi - są one przywoływane przez klasy, do których odwołują się klasy ładujące, do których odwołują się klasy, do których odwołuje się obiekt, do którego odwołują się odniesienia do katalogu głównego. –
@ Tom: Dobre połączenie. Redagowanie... –