Napisałem szybką i brudną implementację podwójnie połączonej listy dla javascript. Chciałbym móc usunąć wiele (kolejnych) węzłów naraz i zastanawiałem się: czy wystarczy odciąć końce tych najbardziej zewnętrznych węzłów, które usuwam, lub czy muszę oddzielnie usuwać każdy węzeł. Jeśli dobrze rozumiem odbiór śmieci w javascriptu, gdy nic nie wskazuje już na te kolejne węzły, nawet jeśli są one nadal ze sobą połączone, powinny być one obsługiwane przez odśmiecarkę, czy to prawda? Jeśli ktoś mógłby mi powiedzieć, jak sam mógłbym to sprawdzić lub zweryfikować, bardzo bym to docenił.Zamknięcie i zbieranie śmieci: najbardziej efektywny sposób na usunięcie kolejnych węzłów z połączonej listy
Odpowiedz
Według MDN:
Począwszy od 2012 roku, wszystkie nowoczesne przeglądarki dostarczy mark-and-sweep garbage collector. Wszystkie udoskonalenia dokonane w dziedzinie zbierania śmieci w JavaScripcie (generowanie/generowanie/współbieżne/równoległe usuwanie śmieci) w ciągu ostatnich kilku lat to usprawnienia w implementacji tego algorytmu, ale nie ulepszenia w stosunku do samego algorytmu zbierania danych ani redukcja definicji kiedy „celem nie jest już potrzebny”
Mark i algorytmy usuwające rozpocząć od obiektów korzeniowych i znaleźć wszystkie osiągalne obiekty następnie zebrać wszystkie te nie osiągalne, więc dla tych przeglądarek odcinając węzłów będzie dobrze. Starsze przeglądarki używają liczenia odwołań, co oznacza, że obiekty są zbierane tylko wtedy, gdy mają 0 odniesień do nich, więc w tym przypadku cykle podwójnie połączonej listy będą problematyczne. Następnie trzeba w jakiś sposób ciąć cykle w kolejnych węzłach (ustawiając odniesienia do wartości null, usuwając słowo kluczowe itd.).
Więc jeśli pracujesz nad przeglądarkami moden, wszystko działa dobrze, ale będziesz potrzebował nieco bardziej zaangażowanego rozwiązania, jeśli chcesz mieć kompatybilność z przeglądarkami takimi jak IE6/7 (zawsze tak jest, czyż nie? ..)
- 1. Zbieranie i odbieranie śmieci
- 2. bardziej efektywny sposób na zbieranie napisów
- 3. Najbardziej efektywny sposób tworzenia drzewa z listy sąsiedztwa
- 4. Najbardziej skuteczny sposób tworzenia połączonej listy z przechowywanych danych?
- 5. Jaki jest najbardziej efektywny sposób na iterowanie listy w pythonie?
- 6. Najbardziej efektywny sposób wybierania tysięcy wierszy z listy identyfikatorów
- 7. Lua powiązania z C++ i zbieranie śmieci
- 8. Najbardziej efektywny sposób na wykonanie wyszukiwania fonetycznego
- 9. Najbardziej efektywny sposób na zgrupowanie boxplot matlab
- 10. Najszybszy i najbardziej efektywny sposób tworzenia XML
- 11. Odwróć co k węzłów połączonej listy
- 12. Najbardziej efektywny sposób analizy Xml
- 13. Najbardziej efektywny sposób konwersji BCD na binarny
- 14. Najbardziej efektywny sposób odczytu pliku
- 15. Najbardziej efektywny sposób wektorów podzbiorczych
- 16. Najbardziej efektywny sposób na indeksowanie zwróconej tablicy?
- 17. Najbardziej efektywny sposób monitorowania kolejki
- 18. Najbardziej efektywny sposób analizowania wyznakowanego wyliczenia do listy
- 19. Zbieranie śmieci z Ruby/Rails
- 20. Najbardziej elegancki sposób na usunięcie elementu ciągowego
- 21. „True” czysty funkcjonalny podwójnie połączonej listy i udostępniania węzłów
- 22. Najbardziej efektywny sposób na znalezienie sąsiadów na liście
- 23. Ile czasu należy poświęcić na zbieranie śmieci?
- 24. Najbardziej efektywny sposób przesyłania strumieniowego na liście kontraktów Futures
- 25. Najbardziej efektywny sposób wykonania 22 różnych kompilacji
- 26. Najbardziej efektywny sposób wyszukiwania/wyszukiwania na ogromnej liście (python)
- 27. Najbardziej efektywny sposób analizowania tego języka skryptowego
- 28. najbardziej efektywny sposób, aby usunąć duplikaty z listy w Pythonie zachowując kolejność i usuwanie najstarszego elementu
- 29. Najbardziej skuteczny sposób na usunięcie wszystkich zduplikowanych wierszy z tabeli?
- 30. Zbieranie śmieci w dalvik vm
Dzięki! Świetny link również. – DudeOnRock