Za pomocą narzędzia do profilowania alokacji możesz znaleźć obiekty, które nie są prawidłowo usuwane, i nadal zachowywać pamięć.
Jak działa to narzędzie
Program profilujący alokacji łączy szczegółowe informacje o zrzutach z narzędzia do profilowania sterty z aktualizacją przyrostową i śledzeniem z panelu Oś czasu. Podobnie jak w przypadku tych narzędzi alokacja sterty obiektów śledzących obejmuje rozpoczęcie nagrywania, wykonanie sekwencji działań, a następnie zatrzymanie nagrywania do analizy.
Narzędzie co jakiś czas robi zrzuty stosu w trakcie całego nagrania (często co 50 ms) oraz robi końcową migawkę na końcu nagrania.
Włącz profilowanie alokacji
Aby zacząć korzystać z narzędzia do profilowania alokacji:
- Upewnij się, że masz najnowszą wersję Chrome Canary.
- Otwórz Narzędzia dla programistów i kliknij ikonę koła zębatego w prawym dolnym rogu.
- Teraz otwórz panel programu profilującego. Powinien wyświetlić się profil o nazwie „Record Heap Allocations” (Rejestruj przydziały sterty).
Odczytywanie profilu alokacji sterty
Profil alokacji sterty pokazuje, gdzie są tworzone obiekty, i wskazuje ścieżkę zachowywania. Na poniższym zrzucie ekranu paski u góry wskazują, kiedy na stercie znajdują się nowe obiekty.
Wysokość każdego słupka odpowiada rozmiarowi ostatnio przydzielonych obiektów, a kolory słupków wskazują, czy obiekty te są wciąż aktywne na końcowym zrzucie stosu. Niebieskie paski wskazują obiekty, które na końcu osi czasu są wciąż aktywne, a szare wskazują obiekty, które zostały przydzielone na osi czasu, ale zostały już usunięte z pamięci:
Na zrzucie poniżej działanie zostało wykonane 10 razy. Przykładowy program zapisuje w pamięci podręcznej 5 obiektów, więc ostatnich 5 pasków powinna się pojawić w pamięci podręcznej. Niebieski pasek po lewej stronie wskazuje jednak na możliwy problem.
Następnie możesz za pomocą suwaków na osi czasu powyżej powiększyć dany zrzut i zobaczyć obiekty, które zostały do niego ostatnio przydzielone:
Kliknięcie konkretnego obiektu na stercie spowoduje wyświetlenie jego drzewa przechowywania w dolnej części zrzutu stosu. Badanie ścieżki przechowywania do obiektu powinno dostarczyć wystarczającą ilość informacji, by zrozumieć, dlaczego obiekt nie został zebrany. Możesz też wprowadzić niezbędne zmiany w kodzie, by usunąć niepotrzebne odwołanie.
Wyświetl przydział pamięci według funkcji
Możesz też wyświetlić przydział pamięci według funkcji JavaScriptu. Więcej informacji znajdziesz w artykule Analizowanie przydziału pamięci według funkcji.