Mam pytanie dotyczące zbierania śmieci w Google Chrome (wersja 20.0.1132.47, Ubuntu 11.04, 64-bitowy).Instancje, do których odnosi się tylko "bound_this", nie są odpadami śmieci.
Podczas porównywania stert-zrzutów i sprawdzania wycieków pamięci, odkryłem kilka przypadków, które nigdy nie zostały oczyszczone. Normalnie takie zachowanie może być śledzone w dół do programatora-błędem, ale w tym przypadku jestem raczej pojęcia ..
Spójrz na poniższy zrzut ekranu
Instancja „dziecko @ 610739” odwołuje tylko przez instancje "bound_this", które należą do funkcji samej instancji potomnej. Tak więc, jak rozumiem, instancja potomna powinna być zbiorem śmieci, ponieważ jedyną inną referencją trzymającą ją jest sama instancja potomna (poprzez funkcje "bound_this").
używam funkcji underscore.js' 'bindAll' użytkową (underscore.js#bindAll), który mapuje do 'native_bind' funkcji chromu (ECMA Script wiki on bound_this)
Am I brakuje czegoś tutaj oczywiste i jeśli tak, to może ktoś wytłumaczyć co utrzymuje te instancje przy życiu?
UPDATE:
W międzyczasie testowałem samej aplikacji w chrominium (18.0.1025.168 (Twórca Budowanie 134367 Linux) Ubuntu 11.10), które nie wykazują te zwisające instancji ..
UPDATE 2:
obserwuję Esailijas wskazówka, aby zapewnić jsfiddle snippet, stworzyłem jeden (http://jsfiddle.net/8gSTR/1/), który naśladuje to, co zasadniczo robię. Uruchomienie tego skrzypiec niestety nie pokazuje niewłaściwego zachowania, którego doświadczam w mojej aplikacji. Sterty-dump podjęte podczas „A'-instancje są nadal odwoływać wygląda niby podobna, choć mimo odniesienia z tablicy window.o który utrzymuje instancje żywe:
jako takie odniesienie brakuje w moim przypadku (zrzut ekranu 1) Nie wiem, co powstrzymuje Chrome przed uwolnieniem tych instancji ...
AKTUALIZACJA 3:
Po wykonaniu porady Loislosa, aby włączyć ukryte właściwości. Wynik (z jedną z rozwiniętych gałęzi) można zobaczyć na poniższym zrzucie ekranu, ale nie zajmuje mi to więcej.
Nie widzisz tego tutaj http://jsfiddle.net/uGX22/3/. Początkowo są tam (Heap zabiera 17.32mb z 60000 zamknięciami), czekam kilka minut i zrobię nową migawkę, a stertę z powrotem do 6mb i zamknięcia nie ma. Czy możesz zmodyfikować moje jsfiddle, aby to odtworzyć? – Esailija
Czy możesz pokazać nam kod, z którym stworzyłeś tę sytuację? Naprawdę nie dostaję tego ze zrzutu debuggera. – Bergi
Postaram się utworzyć mały fragment do odtworzenia problemu. Kod, z którym stworzyłem tę sytuację, jest częścią dość dużego SPA, więc nie jest to łatwe do wyodrębnienia. –