W pakiecie Android SDK 21 w kodzie Object.java natknąłem się na termin "wskaźnik Brooksa". Przeczytałem post here, ale nie mam jasnego obrazu tego. W poście opisana jest jako odniesienie do samego obiektu w stercie. Ale jaki jest tego pożytek?
Jak to pomoże w zbieraniu śmieci i ewakuacji obiektów?Wskaźnik Brooksa w klasie obiektu
Odpowiedz
Blog Romana wyjaśnia, jak działa jego implementacja GC.
To nowa funkcja w Shenandoah GC, który pozwala wątków aplikacji do interakcji z obiektami w stercie gdy są one przemieszczane wokół podczas zagęszczania (przesuwanie obiektów odniesionych do lepszej lokalizacji), eliminując potrzebę "zatrzymania świata"
Wcześniej trzeba było uniemożliwić dostęp do obiektów z odnośnikami, gdy GC je przenosił, aby nikt nie mógł uzyskać dostępu do obiektu, dopóki nie znajdzie się w jego nowej lokalizacji. Jeśli próbowałeś uzyskać dostęp do obiektu, ale GC już go przesunął, pojawią się problemy. Właśnie dlatego mamy "stop-the-world", gdy nadejdzie czas na GC (żadne nici nie mają dostępu do obiektów w sterty dla środków bezpieczeństwa). Podczas przemieszczania się obiektów wykres obiektów jest uważany za niespójny, dlatego najlepiej uniemożliwić dostęp do niego.
Z tym nowym systemie, forwarding pointer (przewiń do spedycji wskaźnik) należy umieścić w miejscu, obiekt odwołanie kiedyś, który odwołuje się do obiektu nową lokalizację. Teraz nie musimy się martwić, że obiekt nie istnieje, jeśli GC go przenosi, ponieważ wciąż możemy odwoływać się do niego za pomocą wskaźnika przekierowania. Możemy teraz uzyskać dostęp do obiektu, podczas gdy GC przesuwa go wokół, co oznacza, że nie musimy już blokować dostępu podczas kompaktowania.
W „wskaźnik forwarding” mam na myśli to Brooks Pointer
- 1. Wskaźnik a zmienna w klasie
- 2. Czy ten "wskaźnik" może być inny niż wskaźnik obiektu?
- 3. obiektu i wskaźnik Wykres reprezentacji dla
- 4. Jak wyodrębnić wskaźnik C++ obiektu od Lua
- 5. Wskaźnik do obiektu stosu bez własności
- 6. dlaczego nie możemy zadeklarować obiektu klasy w tej samej klasie?
- 7. Dwa typy tej samej klasy w klasie obiektu encja
- 8. dla const odniesienia do const wskaźnik wskazujący na const obiektu
- 9. Parse: Jak ustawić wskaźnik w systemie Android?
- 10. bazowy wskaźnik i wskaźnik stosu
- 11. C++: Wskaźnik jako klucz w hashtable
- 12. wskaźnik do członka zamieszanie
- 13. Wskaźnik w tablicy 2D
- 14. Odsłanianie wskaźnik w Boost.Python
- 15. Wskaźnik aktywności w Swift
- 16. wskaźnik w C
- 17. Utwórz niestandardowy wskaźnik SwipeRefreshLayout?
- 18. Chronione dane w klasie nadrzędnej niedostępne w klasie podrzędnej?
- 19. Jak wykonać zapytanie doktrynowe w klasie DataFixture?
- 20. Klasa wskaźnik funkcji członka
- 21. przechodzącej wskaźnik obiekt jako protokół wskaźnik
- 22. Jak przekonwertować wskaźnik pustego kształtu na wskaźnik znakowy w C
- 23. Jak zmienić wskaźnik myszy na wskaźnik palca w ruchu?
- 24. AssemblyInitialize w klasie pochodnej
- 25. Błąd w klasie Handler
- 26. Zgłaszanie wyliczenia w klasie
- 27. getApplicationContext w klasie AsyncTask?
- 28. MFMailComposeViewController w oddzielnej klasie
- 29. Funkcja rozszerzenia statycznego w klasie Java
- 30. Wskaźnik zerowania guice Guine
jest wskaźnik spedycja zawsze na bieżąco z nowym adresem obiektu w trakcie poruszania się? – Diffy
@Diffy Podczas przeprowadzania ewakuacji obiekty są przenoszone tylko raz: od "z-regionów" do "do-regionów". Wskaźniki przekazywania są umieszczone w przestrzeni, aby zająć miejsce obiektu przeniesionego do przestrzeni. Nie ma potrzeby ciągłego aktualizowania wskaźnika przekazywania. Wszystko jest wspomniane na jego blogu :) –